more optional mem tracing

This commit is contained in:
John Cupitt 2018-03-20 12:40:40 +00:00
parent c5bf128e39
commit aaac2ad957

View File

@ -94,6 +94,10 @@
#define DEBUG #define DEBUG
*/ */
/* Track malloc/free and open/close.
#define DEBUG_VERBOSE
*/
#ifdef DEBUG #ifdef DEBUG
# warning DEBUG on in libsrc/iofuncs/memory.c # warning DEBUG on in libsrc/iofuncs/memory.c
#endif /*DEBUG*/ #endif /*DEBUG*/
@ -237,16 +241,18 @@ vips_free( void *buf )
void void
vips_tracked_free( void *s ) vips_tracked_free( void *s )
{ {
size_t size;
/* Keep the size of the alloc in the previous 16 bytes. Ensures /* Keep the size of the alloc in the previous 16 bytes. Ensures
* alignment rules are kept. * alignment rules are kept.
*/ */
s = (void *) ((char*)s - 16); void *start = (void *) ((char *) s - 16);
size = *((size_t*)s); size_t size = *((size_t *) start);
g_mutex_lock( vips_tracked_mutex ); g_mutex_lock( vips_tracked_mutex );
#ifdef DEBUG_VERBOSE
printf( "vips_tracked_free: %p, %zd bytes\n", s, size );
#endif /*DEBUG_VERBOSE*/
if( vips_tracked_allocs <= 0 ) if( vips_tracked_allocs <= 0 )
g_warning( "%s", _( "vips_free: too many frees" ) ); g_warning( "%s", _( "vips_free: too many frees" ) );
if( vips_tracked_mem < size ) if( vips_tracked_mem < size )
@ -257,7 +263,7 @@ vips_tracked_free( void *s )
g_mutex_unlock( vips_tracked_mutex ); g_mutex_unlock( vips_tracked_mutex );
g_free( s ); g_free( start );
VIPS_GATE_FREE( size ); VIPS_GATE_FREE( size );
} }
@ -330,6 +336,10 @@ vips_tracked_malloc( size_t size )
vips_tracked_mem_highwater = vips_tracked_mem; vips_tracked_mem_highwater = vips_tracked_mem;
vips_tracked_allocs += 1; vips_tracked_allocs += 1;
#ifdef DEBUG_VERBOSE
printf( "vips_tracked_malloc: %p, %zd bytes\n", buf, size );
#endif /*DEBUG_VERBOSE*/
g_mutex_unlock( vips_tracked_mutex ); g_mutex_unlock( vips_tracked_mutex );
VIPS_GATE_MALLOC( size ); VIPS_GATE_MALLOC( size );
@ -376,10 +386,10 @@ vips_tracked_open( const char *pathname, int flags, ... )
g_mutex_lock( vips_tracked_mutex ); g_mutex_lock( vips_tracked_mutex );
vips_tracked_files += 1; vips_tracked_files += 1;
#ifdef DEBUG #ifdef DEBUG_VERBOSE
printf( "vips_tracked_open: %s = %d (%d)\n", printf( "vips_tracked_open: %s = %d (%d)\n",
pathname, fd, vips_tracked_files ); pathname, fd, vips_tracked_files );
#endif /*DEBUG*/ #endif /*DEBUG_VERBOSE*/
g_mutex_unlock( vips_tracked_mutex ); g_mutex_unlock( vips_tracked_mutex );
@ -411,9 +421,9 @@ vips_tracked_close( int fd )
g_assert( vips_tracked_files > 0 ); g_assert( vips_tracked_files > 0 );
vips_tracked_files -= 1; vips_tracked_files -= 1;
#ifdef DEBUG #ifdef DEBUG_VERBOSE
printf( "vips_tracked_close: %d (%d)\n", fd, vips_tracked_files ); printf( "vips_tracked_close: %d (%d)\n", fd, vips_tracked_files );
#endif /*DEBUG*/ #endif /*DEBUG_VERBOSE*/
g_mutex_unlock( vips_tracked_mutex ); g_mutex_unlock( vips_tracked_mutex );