1

我正在做一些 linux 编程,我遇到了 blkid 库中的库函数泄漏一些内存的情况......没有太多关于它的文档(https://www.kernel.org/pub/linux/utils/ util-linux/v2.21/libblkid-docs/libblkid-Cache.html)所以我求助于社区来寻找解决这个问题的方法。

该函数是blkid_get_cache和 valgrind 报告:

==29769== 4,129 (72 direct, 4,057 indirect) bytes in 1 blocks are definitely lost in loss record 68 of 69
==29769==    at 0x4C29DB4: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==29769==    by 0x67360BB: blkid_get_cache (in /lib/x86_64-linux-gnu/libblkid.so.1.1.0)
==29769==    by 0x652DBAC: gather_disk_stat() (disk_status.cpp:96)
==29769==    by 0x652DD5A: execute (disk_status.cpp:124)
==29769==    by 0x42599B: PluginHelper::executeClientPlugin(plugin_descriptor*) (plugin_helper.cpp:333)
==29769==    by 0x432BB5: main (main.cpp:48)

现在,这段代码将用于应该运行 24/7 的守护进程,所以我想避免内存的不可控增长。

到目前为止,有人使用 libblkid 吗?如何解决这个内存问题?(在极端情况下我可以free()这样做......但它会影响系统稳定性吗?)

4

1 回答 1

2

你在用blkid_put_cache()吗?

对于 libblkid 的 README:

如果你调用了 blkid_get_cache(),你应该在使用完 blkid 库函数后调用 blkid_put_cache()。如果您对文件具有写访问权限,这会将缓存保存到 blkid.tab 文件。它还将释放所有关联的设备和标签:

blkid_put_cache(缓存);

于 2014-07-27T11:11:06.440 回答