Windows - SQLite活动临界区

Windows - SQLite Active Critical Section

本文关键字:临界区 活动 SQLite Windows      更新时间:2023-10-16

我在testlib.dll中使用SQLite3 3.8.8.2,它有一个导出的函数void DoDBOperation(),它只是打开数据库,然后关闭它。我写了一个EXE,使用LoadLibararyEx()加载DLL,调用函数DoDBOperation(),最后使用FreeLibrary()卸载DLL。我在一个循环中这样做了10000次,这会导致内存泄漏。

经过调查,我发现每次加载和卸载testlib.dll时,它都会泄漏一个48字节的临界区DS,这是WinDBG在调查堆后报告的。AppVerifier也报告一个库正在被卸载,并且有一个活动的临界区。

如果我静态链接DLL,这样的泄漏不会发生。我搜索了很多,但没有帮助。我试图调试sqlite3.c,但没有成功地找到泄漏。

有人能提供一些关于这个问题的指针吗?任何帮助都会很感激。谢谢! !

你应该在dll卸载时调用sqlite3_shutdown来正确清理它分配的资源(例如在DLL_PROCESS_DETACH处理程序中)