c++ - mongocxx::instance inst{} 内存泄漏;

标签 c++ linux mongodb mongo-cxx-driver

Valgrind 使用 mongocxx::instance inst{} 给我一个still reachable 记录;

==3014== 16,384 bytes in 1 blocks are still reachable in loss record 609 of 609
==3014==    at 0x5374C20: realloc (vg_replace_malloc.c:662)
==3014==    by 0x396046ACCE: CRYPTO_realloc (in /usr/lib64/libcrypto.so.1.0.1e)
==3014==    by 0x39604E604D: lh_insert (in /usr/lib64/libcrypto.so.1.0.1e)
==3014==    by 0x39604E87C8: ??? (in /usr/lib64/libcrypto.so.1.0.1e)
==3014==    by 0x39604E814B: ??? (in /usr/lib64/libcrypto.so.1.0.1e)
==3014==    by 0x396054C2FD: ERR_load_CMS_strings (in /usr/lib64/libcrypto.so.1.0.1e)
==3014==    by 0x3963045A38: SSL_load_error_strings (in /usr/lib64/libssl.so.1.0.1e)
==3014==    by 0x62BD653: ??? (in /usr/lib64/libmongoc-1.0.so.0.0.0)
==3014==    by 0x62A2278: ??? (in /usr/lib64/libmongoc-1.0.so.0.0.0)
==3014==    by 0x395BC0CE02: pthread_once (in /lib64/libpthread-2.12.so)
==3014==    by 0x55ADDE5: std::unique_ptr<mongocxx::v_noabi::instance::impl, std::default_delete<mongocxx::v_noabi::instance::impl> > core::v1::make_unique<mongocxx::v_noabi::instance::impl, void, std::unique_ptr<mongocxx::v_noabi::logger, std::default_delete<mongocxx::v_noabi::logger> > >(std::unique_ptr<mongocxx::v_noabi::logger, std::default_delete<mongocxx::v_noabi::logger> >&&) (in /usr/lib64/libmongocxx.so.3.0.3)
==3014==    by 0x55ADAEE: mongocxx::v_noabi::instance::instance(std::unique_ptr<mongocxx::v_noabi::logger, std::default_delete<mongocxx::v_noabi::logger> >) (in /usr/lib64/libmongocxx.so.3.0.3)
==3014==    by 0x55ADCF4: mongocxx::v_noabi::instance::instance() (in /usr/lib64/libmongocxx.so.3.0.3)
==3014==    by 0x4F6188: main (main.c:280)

我该如何摆脱它。 我在 fork 之后但在创建任何线程之前声明实例。

最佳答案

我的建议是,在验证以下内容后,您为此写一个抑制:

  • 您是否已验证您的 mongocxx::instance 对象的 dtor 正在执行?
  • 您是否已验证该对象的 dtor 实际上正在调用 mongoc_cleanup

如果这两个都是真的,那么你的下一个问题是询问 libcrypto 是否真的在任何路径下释放了这个分配的数据。如果答案是肯定的,那么你的下一个问题就是问为什么它没有被调用。如果答案是否定的,那么你应该写一个抑制。

在这里写一个抑制可能是合适的,因为这几乎肯定是一次性分配,因此不会绑定(bind)到会导致无限内存增长的每个操作上下文。

另外,请注意内存实际上并没有泄漏——它仍然可以访问。

关于c++ - mongocxx::instance inst{} 内存泄漏;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46790473/

相关文章:

c++ - 可变参数模板方法来创建对象

c++ - Configure_file 一次创建一个目录及其子目录,一次不创建

linux - Jenkins:在 bash 脚本中插入特殊字符

linux - 使用自动启动后,我被锁定在我的 python 程序、Linux 操作系统之外

mongodb - 使用 mongo 的 $bucket 聚合时如何检索桶边界?

javascript - MongoDB "eval"执行顺序

c++ - 试图理解为什么流在读取整个文件时失败

c++ - 在 Qt 中使用 Wt

linux - 用于时间线数据的类似 gnuplot 的程序

windows - 如何在 Ubuntu VirtualBox 中运行 meteor 应用程序并在 Windows 主机上使用编辑器进行编辑?