Memory keeps growing

Martin Fuller

I'm pretty sure that this Poco part of the library is not leaking, but also I can't figure it out why the memory keeps increasing.

If I let this program to run for half a minute, the ram memory increase by more than 10MB, starting from less than one.

#include "Poco/Net/SSLManager.h"
    int main(int argc, const char * argv[])
    {
        int counter = 0;
        while(counter < 1000000)
        {
            Poco::Net::Context::Ptr context = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "", Poco::Net::Context::VERIFY_NONE, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
            counter++;
        }

        return 0;
    }

I set a breakpoint to see if the object is deleted and it does;

inline void RefCountedObject::release() const
{
    if (--_counter == 0) delete this;
}

The code above is from class Foundation_API RefCountedObject which is used by the context.

I spent almost two days trying to understand why the memory keeps increasing. Testing with Valgrind, it says that it does leak memory, but nobody mention about this on the internet.

Compiled and run on Ubuntu and Mac os x too, the same problem.

Thank you.

Later edit: By running valgrind --leak-check=yes ./exec on mac os x, below is the output:

==808== Memcheck, a memory error detector
==808== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==808== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==808== Command: ./exec
==808== 
--808-- ./exec:
--808-- dSYM directory is missing; consider using --dsymutil=yes
--808-- /Users/myusername/bla/local/blaStream/blaStream/Libraries/libjson_linux-gcc-4.2.1_libmt.dylib:
--808-- dSYM directory is missing; consider using --dsymutil=yes
--808-- /Users/myusername/bla/local/blaStream/blaStream/Libraries/libboost_system-mt.dylib:
--808-- dSYM directory is missing; consider using --dsymutil=yes
--808-- /Users/myusername/bla/local/blaStream/blaStream/Libraries/libboost_thread-mt.dylib:
--808-- dSYM directory is missing; consider using --dsymutil=yes
UNKNOWN __pthread_sigmask is unsupported. This warning will not be repeated.
==808== 
==808== HEAP SUMMARY:
==808==     in use at exit: 72,981 bytes in 1,029 blocks
==808==   total heap usage: 305,673 allocs, 304,644 frees, 11,304,653 bytes allocated
==808== 
==808== 72 (32 direct, 40 indirect) bytes in 1 blocks are definitely lost in loss record 73 of 131
==808==    at 0x47F1: malloc (vg_replace_malloc.c:300)
==808==    by 0x8294F3: CRYPTO_malloc (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x80BEDB: sk_new_null (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x81EE87: engine_cleanup_add_last (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x7FFD4E: ENGINE_add (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x87FF55: ENGINE_load_dynamic (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x83180C: OPENSSL_config (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x1152669: Poco::Crypto::OpenSSLInitializer::initialize() (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoCrypto.16.dylib)
==808==    by 0xFC6DE: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808==    by 0xFC67F: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808==    by 0x100027ADB: main (in ./exec)
==808== 
==808== 904 (176 direct, 728 indirect) bytes in 1 blocks are definitely lost in loss record 100 of 131
==808==    at 0x47F1: malloc (vg_replace_malloc.c:300)
==808==    by 0x8294F3: CRYPTO_malloc (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x825CE5: lh_new (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x83AAC2: def_get_class (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x83A4E8: int_new_ex_data (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x81EBFE: ENGINE_new (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x87FEBA: ENGINE_load_dynamic (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x83180C: OPENSSL_config (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x1152669: Poco::Crypto::OpenSSLInitializer::initialize() (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoCrypto.16.dylib)
==808==    by 0xFC6DE: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808==    by 0xFC67F: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808==    by 0x100027ADB: main (in ./exec)
==808== 
==808== 1,536 (176 direct, 1,360 indirect) bytes in 1 blocks are definitely lost in loss record 119 of 131
==808==    at 0x47F1: malloc (vg_replace_malloc.c:300)
==808==    by 0x8294F3: CRYPTO_malloc (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x825CE5: lh_new (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x87E33D: int_thread_get (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x87E54A: int_thread_set_item (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x87DE34: ERR_get_state (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x85DF4B: ERR_clear_error (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x83180C: OPENSSL_config (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x1152669: Poco::Crypto::OpenSSLInitializer::initialize() (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoCrypto.16.dylib)
==808==    by 0xFC6DE: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808==    by 0xFC67F: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808==    by 0x100027ADB: main (in ./exec)
==808== 
==808== 2,048 bytes in 1 blocks are definitely lost in loss record 120 of 131
==808==    at 0x51C7: calloc (vg_replace_malloc.c:627)
==808==    by 0xC9100A: strerror (in /usr/lib/system/libsystem_c.dylib)
==808==    by 0x853C87: ERR_load_ERR_strings (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x872388: ERR_load_crypto_strings (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x7C5DC8: SSL_load_error_strings (in /usr/lib/libssl.0.9.8.dylib)
==808==    by 0x1152673: Poco::Crypto::OpenSSLInitializer::initialize() (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoCrypto.16.dylib)
==808==    by 0xFC6DE: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808==    by 0xFC67F: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808==    by 0x100027ADB: main (in ./exec)
==808== 
==808== 21,728 (32 direct, 21,696 indirect) bytes in 1 blocks are definitely lost in loss record 131 of 131
==808==    at 0x47F1: malloc (vg_replace_malloc.c:300)
==808==    by 0x8294F3: CRYPTO_malloc (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x80BEDB: sk_new_null (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x867092: CONF_module_add (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x82C5C8: OPENSSL_load_builtin_modules (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x831807: OPENSSL_config (in /usr/lib/libcrypto.0.9.8.dylib)
==808==    by 0x1152669: Poco::Crypto::OpenSSLInitializer::initialize() (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoCrypto.16.dylib)
==808==    by 0xFC6DE: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808==    by 0xFC67F: Poco::Net::Context::Context(Poco::Net::Context::Usage, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Poco::Net::Context::VerificationMode, int, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in /usr/local/Cellar/poco/1.4.6p4-all/lib/libPocoNetSSL.16.dylib)
==808==    by 0x100027ADB: main (in ./exec)
==808== 
==808== LEAK SUMMARY:
==808==    definitely lost: 2,464 bytes in 5 blocks
==808==    indirectly lost: 33,184 bytes in 639 blocks
==808==      possibly lost: 0 bytes in 0 blocks
==808==    still reachable: 264 bytes in 3 blocks
==808==         suppressed: 37,069 bytes in 382 blocks
==808== Reachable blocks (those to which a pointer was found) are not shown.
Alex

Likely due to this issue; fix will be in 1.6.0

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Windows Task Manager shows process memory keeps growing

분류에서Dev

The size of GridView keeps growing when PageAdapter (Android)

분류에서Dev

Process node growing until eating all memory

분류에서Dev

Memory allocation failed: growing buffer on PHP, SoapClient

분류에서Dev

LongListSelector ItemTemplate not growing

분류에서Dev

JS Gauge with growing arc

분류에서Dev

How to prevent span from growing with content

분류에서Dev

Column constraint: allow growing only value

분류에서Dev

How shall I store growing collection of videos?

분류에서Dev

Stop TextBox in ScrollViewer from growing with content

분류에서Dev

Do the Ubuntu repositories just keep growing?

분류에서Dev

video on canvas keeps resizing

분류에서Dev

Deluge keeps crashing

분류에서Dev

SSL keeps waiting for response

분류에서Dev

Javascript Prompt keeps appearing

분류에서Dev

function keeps asking for input

분류에서Dev

Vim keeps unindenting

분류에서Dev

Why does this canvas keep growing? (dynamic resizing of canvas)

분류에서Dev

Synaptic Package Manager keeps crashing

분류에서Dev

Registration result keeps returning false

분류에서Dev

SqlCeCommand keeps giving me an exception

분류에서Dev

Grunt watch keeps watching infinite

분류에서Dev

Functions keeps returning the same value

분류에서Dev

Grunt watch keeps watching infinite

분류에서Dev

SwiftyJSON keeps returning empty objects

분류에서Dev

Windows Keeps Changing The Hardware Clock

분류에서Dev

Netflix/Amazon Video keeps stuttering

분류에서Dev

Stanford Calculator app keeps crashing

분류에서Dev

WinSCP keeps changing file owner