找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4531|回复: 1
打印 上一主题 下一主题
收起左侧

EnterCriticalSection的怪问题 产生全局Event句柄泄露

[复制链接]
跳转到指定楼层
楼主
ID:127229 发表于 2016-6-19 01:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在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



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:486130 发表于 2019-3-7 11:33 | 只看该作者
你好,关于 EnterCriticalSection的怪问题 产生全局Event句柄泄露 的解决办法,方便提供代码我参考参考吗? 万分感谢 125345110@qq.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表