利用压力测试来保证软件的质量(五) 窗口消息问题
2010-09-10 21:07 王克伟 阅读(424) 评论(0) 编辑 收藏 举报2010.6.28/6.29
今天遇到个问题:
cprog模块没有处理好WM_CLOSE消息重入问题,造成double free。
Cause:
The heap 0x002d8200 was double freed,
because the object of CCameraDevice was deleted twice,
caused by WM_CLOSE message processed twice by CCoreBrowser::WndProc.
The root cause is that while CCoreBrowser::WndProc processing WM_CLOSE,
ForceWindowClose is called by AYGSHELL due to CPROG's SwitchView,
it makes the WM_CLOSE sending to CCoreBrowser again.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | COREDLL!RHeapFreeWithCaller(_RHEAP * 0x00060020, unsigned long 0x00000000, void * 0x002d8200, unsigned long 0x41f2bc38) line 2611 + 19 bytes COREDLL!DoFree(void * 0x002d8200, void * 0x41f2bc38) line 62 + 25 bytes COREDLL!delete2_tag(void * 0x002d8200) line 78 + 11 bytes PIMGDLL!CCameraDevice::`scalar deleting destructor'() + 25 bytes PIMGDLL!DeleteCameraDevices(CCameraDevice * * 0x0005c728) line 45 + 7 bytes FBROWSER!CFilePicker::OnClose() line 1870 + 9 bytes FBROWSER!CCoreBrowser::WndProc(HWND__ * 0x700eb620, unsigned int 0x00000010, unsigned int 0x00000000, long 0x00000000) line 672 ... AYGSHELL!ForceWindowClose(HWND__ * 0x70043300, HWND__ * 0x00000000, unsigned int 0x00000000, long 0x00000000) line 201 + 28 bytes AYGSHELL!SHForceBaseStateEx(_BASESTATEINFO * 0x0005cd10) line 329 + 13 bytes AYGSHELL!SHForceBaseState(HWND__ * 0x70043300, long 0x00000000) line 246 + 23 bytes CPROG!CProgressCommon::SwitchViewInternal(tagPH_VIEW PH_VIEW_INCOMING, unsigned long 0x00000000) line 714 + 15 bytes CPROG!CProgressCommon::DoVerbSwitchView(const CProgVerbStruct * 0x0005cd94, long 0x0000000a) line 2349 + 6 bytes CPROG!CProgressCommon::DoVerb(const CProgVerbStruct * 0x0005cd94) line 2884 ... AYGSHELL!CChangeWatcher::ShutdownWatchThread() line 274 + 9 bytes AYGSHELL!CChangeWatcher::RemoveWatch(HWND__ * 0x700eb620) line 1050 AYGSHELL!SHChangeNotifyDeregister(HWND__ * 0x700eb620) line 1126 + 8 bytes FBROWSER!CFileExplorer::Delete() line 249 + 8 bytes FBROWSER!CCoreBrowser::WndProc(HWND__ * 0x700eb620, unsigned int 0x00000010, unsigned int 0x00000000, long 0x00000000) line 672 ... |
Solution:
After DeleteCameraDevices we set the value of pCameraDeviceChain in window property list to NULL.
在处理WM_DESTROY消息时收到其它消息。
WM_CLOSE/WM_DESTROY/WM_QUIT是什么关系?
作者: 王克伟
出处: http://wangkewei.cnblogs.com/
版权声明: 本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任的权利。
您可以从这里更方便的找到我的文章。
出处: http://wangkewei.cnblogs.com/
版权声明: 本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任的权利。
您可以从这里更方便的找到我的文章。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架