IdThreadSafe.pas 中 TIdCriticalSection.Create 的内存泄漏

Memory Leak of TIdCriticalSection.Create in IdThreadSafe.pas

在 Delphi 11 64 位应用程序中使用 TIdHttpServer 和 MadExcept,每次我关闭应用程序时,MadExcept 设置为报告“资源泄漏”,我得到两次泄漏,都与IdThreadSafe.pas 中的 TIdCriticalSection 和 SyncObjs.pas 中的 TCriticalSection。

这具有“虚假标志”泄漏的所有特征 - 即 MadExcept 报告的泄漏实际上并不存在。但我必须确定。

利用旧的“ReportMemoryLeaksOnShutdown := True”不会报告这 2 次泄漏...

还有其他人看到吗?

谢谢。

是的,它们是实际泄漏,是的,这是故意的行为。请参阅 Indy 的 IdThread.pasIdStack.pas 单位底部的评论。

也就是说,它们是 已注册 泄漏,因此它们不应出现在泄漏报告中。在 Delphi 2006+。使用 System.RegisterExpectedMemoryLeak(),因此如果 MadExcept 正确挂接到 RTL(即提供一个 TMemoryManagerEx.RegisterExpectedMemoryLeak 回调,忽略报告中报告的泄漏),它应该自动获取注册。

否则,对于早期版本,您可以使用 IdCompilerDefines.inc 中定义的 USE_MADEXCEPT(或 USE_FASTMM4,或 USE_LEAKCHECK 其他内存管理器)重新编译 Indy 以启用泄漏注册。

否则,您可以使用 IdCompilerDefines.inc 中定义的 FREE_ON_FINAL 重新编译 Indy 以堵住漏洞。