This comment is incorrect. deflateReset() doesn't leak; it resets the
object to a just-initialized state. deflateEnd() is correct (no comment
needed for that; it's obvious, I don't know why I used deflateReset to
begin with).
zlib doesn't appear to do anything special with allocations; running
the following:
#include <zlib.h>
main()
{
z_stream z; z.zalloc = NULL; z.zfree = NULL;
inflateInit2( &z, -MAX_WBITS ); inflateReset( &z );
}
under Valgrind shows:
==17033== 7080 bytes in 1 blocks are possibly lost in loss record 1 of 1
==17033== at 0x1B904EDD: malloc (vg_replace_malloc.c:131)
==17033== by 0x1B91D4B4: zcalloc (in /usr/lib/libz.so.1.2.1.2)
==17033== by 0x1B91D608: inflateInit2_ (in /usr/lib/libz.so.1.2.1.2)
==17033== by 0x80485A4: main (in /home/glenn/a.out)
This commit is contained in:
@@ -502,11 +502,6 @@ RageFileObjZipDeflated::RageFileObjZipDeflated( const RageFileObjZipDeflated &cp
|
||||
|
||||
RageFileObjZipDeflated::~RageFileObjZipDeflated()
|
||||
{
|
||||
//We MUST use inflateEnd() here insted of inflateReset(). Use
|
||||
//of inflateReset() will cause large quantities of globally
|
||||
//allocated ram to be leaked, making it impervious to most leak
|
||||
//detection. See zlib.h documentation on inflateReset() for
|
||||
//more information.
|
||||
int err = inflateEnd( &dstrm );
|
||||
if( err != Z_OK )
|
||||
LOG->Trace( "Huh? inflateEnd() err = %i", err );
|
||||
|
||||
Reference in New Issue
Block a user