标题: EnterCriticalSection的怪问题 产生全局Event句柄泄露 [打印本页]

作者: 51hei不    时间: 2016-6-19 01:51
标题: EnterCriticalSection的怪问题 产生全局Event句柄泄露
在window平台下,产生并进入临界区EnterCriticalSection之后不释放,用handlespy检测,会产生一定数量的全局Event句柄泄露,甚是奇怪,开始以为EnterCriticalSection被重载了,几经折腾,基本定位在EnterCriticalSection自身,列堆栈以观之,发现EnterCriticalSection内部调用了NTCreateEvent函数, google一把,大概是说在多核处理器上,有时候会需要通过创建全局Event来干点啥CPU同步的事情,所以,在我的四核开发机器上,大概每20次就调用就会产生一次Event泄露。 知道原因好办了,为CriticalSection增加引用计数器,没人用删掉,发了几十万笔,泄露为0,解决之。

工具:查泄露工具: HandleSpy.exe 开源工具,通过比较两次快照就能得到泄露的代码行,犀利。查句柄工具: SysinternalsSuite 包内的 handle.exe

顺便鄙视一下windows8,任务管理器把handle计数器全搞没了,对于我们这些搞开发的,真的非常不方便。

C:\Code\TechLab\MyTest\MyTest\Release>handle.exe -s -p kdfixgw.exe
Handle v3.51
Copyright (C) 1997-2013 Mark Russinovich
Sysinternals

Handle type summary:
  ALPC Port       : 4
  Desktop         : 1
  Directory       : 4
  EtwRegistration : 71
  Event           : 99
  File            : 99
  IoCompletion    : 2
  Key             : 21
  Mutant          : 48
  Section         : 92
  Semaphore       : 104
  Thread          : 59
  Timer           : 3
  TpWorkerFactory : 1
  WaitCompletionPacket: 2
  WindowStation   : 2
Total handles: 612




作者: sniper_bing    时间: 2019-3-7 11:33
你好,关于 EnterCriticalSection的怪问题 产生全局Event句柄泄露 的解决办法,方便提供代码我参考参考吗? 万分感谢 125345110@qq.com




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1