id summary reporter owner description type status milestone component version severity resolution keywords cc 4922 memory leak in boost::iostreams::detail::chain_impl::~chain_impl() victor.shugaev@… Jonathan Turkanis "It appears that there are some cases when the ''chain_impl::close()'' ('''boost/iostreams/chain.hpp''') throws an exception. If it is invoked from {{{ ~chain_impl() { try { close(); reset(); } catch (...) { } } }}} the following ''reset()'' method won't be invoked and it results in memory leak because of there is a ''delete buf;'' invokation in the ''reset()''. Patch file is attached. Also I have managed to produce such a situation (example is attached). Below shows that the ''gzip_decompressor'' was constructed 4 times (1 time by default constructor and 3 times by copy constructor), but destroyed only 3 times. Destructor for object at 0x4e46b98 wasn't invoked. ---- $ valgrind ./leak_example[[BR]] ==18153== Memcheck, a memory error detector[[BR]] ==18153== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.[[BR]] ==18153== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info[[BR]] ==18153== Command: ./leak_example[[BR]] ==18153==[[BR]] '''gzip_decompressor has been constructed at: 0x7ff0007c0[[BR]] gzip_decompressor has been copy constructed from: 0x7ff0007c0 at: 0x7ff000450[[BR]] gzip_decompressor has been copy constructed from: 0x7ff000450 at: 0x7ff000320[[BR]] gzip_decompressor has been copy constructed from: 0x7ff000320 at: 0x4e46b98[[BR]] gzip_decompressor has been destroyed at: 0x7ff000320[[BR]] gzip_decompressor has been destroyed at: 0x7ff000450[[BR]] gzip_decompressor has been destroyed at: 0x7ff0007c0'''[[BR]] ==18153==[[BR]] ==18153== HEAP SUMMARY:[[BR]] ==18153== in use at exit: 51,493 bytes in 13 blocks[[BR]] ==18153== total heap usage: 28 allocs, 15 frees, 69,665 bytes allocated[[BR]] ==18153==[[BR]] ==18153== LEAK SUMMARY:[[BR]] ==18153== '''definitely lost: 216 bytes in 1 blocks'''[[BR]] ==18153== indirectly lost: 51,277 bytes in 12 blocks[[BR]] ==18153== possibly lost: 0 bytes in 0 blocks[[BR]] ==18153== still reachable: 0 bytes in 0 blocks[[BR]] ==18153== suppressed: 0 bytes in 0 blocks[[BR]] ==18153== Rerun with --leak-check=full to see details of leaked memory[[BR]] ==18153==[[BR]] ==18153== For counts of detected and suppressed errors, rerun with: -v[[BR]] ==18153== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)[[BR]] " Patches closed To Be Determined iostreams Boost 1.45.0 Problem fixed