UDT源码剖析(五):UDT::cleanup()过程代码注释
2012-09-19 17:19
501 查看
调用路线
UDT::cleanup()->CUDT::cleanup()->CUDTUnited::cleanup()
UDT::cleanup()->CUDT::cleanup()->CUDTUnited::cleanup()
1 | int CUDTUnited::cleanup() |
2 | { |
3 | // 锁保护 |
4 | CGuard gcinit(m_InitLock); |
5 |
6 | // 如果还有实例运行,则到此为止了 |
7 | if (--m_iInstanceCount > 0) |
8 | return 0; |
9 |
10 | //destroy CTimer::EventLock |
11 | // 如果垃圾收集没有启动,则到此为止了 |
12 | if (!m_bGCStatus) |
13 | return 0; |
14 |
15 | // 标注状态为关闭中 |
16 | m_bClosing = true ; |
17 |
18 | // pthread_cond_signal及SetEvent,立即释放一个解锁信号 |
19 | // pthread_join及WaitForSingleObject,等待GC线程结束 |
20 | // 清除相应的锁变量 |
21 | #ifndef WIN32 |
22 | pthread_cond_signal(&m_GCStopCond); |
23 | pthread_join(m_GCThread, NULL); |
24 | pthread_mutex_destroy(&m_GCStopLock); |
25 | pthread_cond_destroy(&m_GCStopCond); |
26 | #else |
27 | SetEvent(m_GCStopCond); |
28 | WaitForSingleObject(m_GCThread, INFINITE); |
29 | CloseHandle(m_GCThread); |
30 | CloseHandle(m_GCStopLock); |
31 | CloseHandle(m_GCStopCond); |
32 | #endif |
33 |
34 | // 标识垃圾收集未运行 |
35 | m_bGCStatus = false ; |
36 |
37 | // Global destruction code |
38 | // winsock的释放函数,与WSAStartup配对 |
39 | #ifdef WIN32 |
40 | WSACleanup(); |
41 | #endif |
42 |
43 | return 0; |
44 | } |
相关文章推荐
- UDT源码剖析(六):UDT::socket()过程代码注释
- UDT源码剖析(三):UDT::startup()过程代码注释
- UDT源码剖析(六):UDT::socket()过程代码注释
- UDT源码剖析(三):UDT::startup()过程代码注释
- UDT源码剖析(五):UDT::cleanup()过程代码注释
- Redis源码剖析和注释(二十三)--- Redis Sentinel实现(哨兵的执行过程和执行的内容)
- UDT源码剖析(二):UDT自带例程recvfile注释
- Redis源码剖析和注释(二十八)--- Redis 事务实现和乐观锁
- Java Web开发过程用各种代码的注释
- Redis源码剖析和注释(九)--- 字符串命令的实现(t_string)
- MyEclipse设置Java代码注释过程(图)
- HotSpot模板解释器目标代码生成过程源码分析
- Redis源码剖析和注释(二十)--- 网络连接库剖析(client的创建/释放、命令接收/回复、Redis通信协议分析等)
- 【深度剖析HMM(附Python代码)】2.隐马尔科夫链HMM的EM训练过程
- Prototype 1.4.0源码详细解释--脚本代码全文注释
- Redis源码剖析和注释(十八)--- Redis AOF持久化机制
- openresty源码剖析——lua代码的加载
- Redis源码剖析和注释(三)--- Redis 字典结构
- MyEclipse设置Java代码注释过程(图)
- Redis源码剖析和注释(二十五)--- Redis Cluster 的通信流程深入剖析(载入配置文件、节点握手、分配槽)