Merge pull request #1240 from jtorresfabra/fix_hidden_threapool_leak

Fix for hidden leaks in ThreadPool
This commit is contained in:
John Cupitt 2019-02-27 13:41:17 +00:00 committed by GitHub
commit 3324ed8a2f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -579,6 +579,9 @@ vips_thread_free( VipsThread *thr )
VIPS_FREEF( g_object_unref, thr->state );
thr->pool = NULL;
/* Free the thread memory
*/
g_free(thr);
}
static int
@ -703,7 +706,7 @@ vips_thread_new( VipsThreadpool *pool )
{
VipsThread *thr;
if( !(thr = VIPS_NEW( pool->im, VipsThread )) )
if( !(thr = VIPS_NEW( NULL, VipsThread )) )
return( NULL );
thr->pool = pool;
thr->state = NULL;
@ -738,7 +741,9 @@ vips_threadpool_kill_threads( VipsThreadpool *pool )
vips_thread_free( pool->thr[i] );
pool->thr[i] = NULL;
}
/* Free the thread array
*/
g_free(pool->thr);
pool->thr = NULL;
VIPS_DEBUG_MSG( "vips_threadpool_kill_threads: "
@ -758,7 +763,9 @@ vips_threadpool_free( VipsThreadpool *pool )
VIPS_FREEF( vips_g_mutex_free, pool->allocate_lock );
vips_semaphore_destroy( &pool->finish );
vips_semaphore_destroy( &pool->tick );
/* Free pool memory
*/
g_free(pool);
return( 0 );
}
@ -779,7 +786,7 @@ vips_threadpool_new( VipsImage *im )
/* Allocate and init new thread block.
*/
if( !(pool = VIPS_NEW( im, VipsThreadpool )) )
if( !(pool = VIPS_NEW( NULL, VipsThreadpool )) )
return( NULL );
pool->im = im;
pool->allocate = NULL;
@ -802,11 +809,6 @@ vips_threadpool_new( VipsImage *im )
n_tiles = VIPS_CLIP( 0, n_tiles, MAX_THREADS );
pool->nthr = VIPS_MIN( pool->nthr, n_tiles );
/* Attach tidy-up callback.
*/
g_signal_connect( im, "close",
G_CALLBACK( vips_threadpool_new_cb ), pool );
VIPS_DEBUG_MSG( "vips_threadpool_new: \"%s\" (%p), with %d threads\n",
im->filename, pool, pool->nthr );
@ -824,7 +826,7 @@ vips_threadpool_create_threads( VipsThreadpool *pool )
/* Make thread array.
*/
if( !(pool->thr = VIPS_ARRAY( pool->im, pool->nthr, VipsThread * )) )
if( !(pool->thr = VIPS_ARRAY( NULL, pool->nthr, VipsThread * )) )
return( -1 );
for( i = 0; i < pool->nthr; i++ )
pool->thr[i] = NULL;