blkid_get_cache似乎泄漏了内存

时间:2013-05-23 08:51:25

标签: c linux memory-leaks blkid

我正在进行一些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)

现在,这段代码将用于守护进程,该进程本应全天候运行,因此我希望避免无法控制的内存增长。

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

1 个答案:

答案 0 :(得分:1)

您使用的是blkid_put_cache()吗?

对于libblkid的自述文件:

  

如果您调用了blkid_get_cache(),则应该调用   使用blkid库函数完成blkid_put_cache()。   如果您已写入,这将保存缓存到blkid.tab文件   访问该文件。它还将释放所有相关设备和   标记:

     

blkid_put_cache(高速缓冲存储器);