2017-10-17 3 views
1

Valgrind는 still reachable 레코드를 mongocxx :: instance inst {}로 제공합니다.mongocxx :: instance inst {};로 메모리 누수가 발생했습니다.

==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) 

어떻게 제거하나요? 포크 후에 인스턴스를 선언하지만 스레드를 만들기 전에 선언합니다. 당신이 검증 한 후, 이것에 대한 억제를 작성하는 것이

답변

0

나의 추천 될 다음

  • 당신이 당신의 mongocxx::instance 개체에 대한 dtor이 실행되는 것을 확인 했습니까?
  • 해당 개체의 dtor이 실제로 mongoc_cleanup을 호출하는지 확인 했습니까?

두 가지 모두 사실이면 다음 질문은 libcrypto가 실제로 할당 된 데이터를 모든 경로에서 해제하는지 여부를 묻는 것입니다. 그 대답이 '예'라면, 다음 질문은 그것이 왜 부르지 않는지 묻는 것입니다. 그 대답이 "아니오"라면, 억압을 써야합니다.

억압을 쓰는 것이 거의 확실한 일회성 할당이므로 무제한적인 메모리 증가를 초래하는 작업 별 컨텍스트에 연결되지 않기 때문에 여기에서 적절할 수 있습니다.

또한 메모리가 실제로 누출되지는 않지만 여전히 도달 할 수 있습니다.