Merge pull request #1240 from jtorresfabra/fix_hidden_threapool_leak
Fix for hidden leaks in ThreadPool
This commit is contained in:
commit
3324ed8a2f
@ -579,6 +579,9 @@ vips_thread_free( VipsThread *thr )
|
|||||||
|
|
||||||
VIPS_FREEF( g_object_unref, thr->state );
|
VIPS_FREEF( g_object_unref, thr->state );
|
||||||
thr->pool = NULL;
|
thr->pool = NULL;
|
||||||
|
/* Free the thread memory
|
||||||
|
*/
|
||||||
|
g_free(thr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -703,7 +706,7 @@ vips_thread_new( VipsThreadpool *pool )
|
|||||||
{
|
{
|
||||||
VipsThread *thr;
|
VipsThread *thr;
|
||||||
|
|
||||||
if( !(thr = VIPS_NEW( pool->im, VipsThread )) )
|
if( !(thr = VIPS_NEW( NULL, VipsThread )) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
thr->pool = pool;
|
thr->pool = pool;
|
||||||
thr->state = NULL;
|
thr->state = NULL;
|
||||||
@ -738,7 +741,9 @@ vips_threadpool_kill_threads( VipsThreadpool *pool )
|
|||||||
vips_thread_free( pool->thr[i] );
|
vips_thread_free( pool->thr[i] );
|
||||||
pool->thr[i] = NULL;
|
pool->thr[i] = NULL;
|
||||||
}
|
}
|
||||||
|
/* Free the thread array
|
||||||
|
*/
|
||||||
|
g_free(pool->thr);
|
||||||
pool->thr = NULL;
|
pool->thr = NULL;
|
||||||
|
|
||||||
VIPS_DEBUG_MSG( "vips_threadpool_kill_threads: "
|
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_FREEF( vips_g_mutex_free, pool->allocate_lock );
|
||||||
vips_semaphore_destroy( &pool->finish );
|
vips_semaphore_destroy( &pool->finish );
|
||||||
vips_semaphore_destroy( &pool->tick );
|
vips_semaphore_destroy( &pool->tick );
|
||||||
|
/* Free pool memory
|
||||||
|
*/
|
||||||
|
g_free(pool);
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -779,7 +786,7 @@ vips_threadpool_new( VipsImage *im )
|
|||||||
|
|
||||||
/* Allocate and init new thread block.
|
/* Allocate and init new thread block.
|
||||||
*/
|
*/
|
||||||
if( !(pool = VIPS_NEW( im, VipsThreadpool )) )
|
if( !(pool = VIPS_NEW( NULL, VipsThreadpool )) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
pool->im = im;
|
pool->im = im;
|
||||||
pool->allocate = NULL;
|
pool->allocate = NULL;
|
||||||
@ -802,11 +809,6 @@ vips_threadpool_new( VipsImage *im )
|
|||||||
n_tiles = VIPS_CLIP( 0, n_tiles, MAX_THREADS );
|
n_tiles = VIPS_CLIP( 0, n_tiles, MAX_THREADS );
|
||||||
pool->nthr = VIPS_MIN( pool->nthr, n_tiles );
|
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",
|
VIPS_DEBUG_MSG( "vips_threadpool_new: \"%s\" (%p), with %d threads\n",
|
||||||
im->filename, pool, pool->nthr );
|
im->filename, pool, pool->nthr );
|
||||||
|
|
||||||
@ -824,7 +826,7 @@ vips_threadpool_create_threads( VipsThreadpool *pool )
|
|||||||
|
|
||||||
/* Make thread array.
|
/* Make thread array.
|
||||||
*/
|
*/
|
||||||
if( !(pool->thr = VIPS_ARRAY( pool->im, pool->nthr, VipsThread * )) )
|
if( !(pool->thr = VIPS_ARRAY( NULL, pool->nthr, VipsThread * )) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
for( i = 0; i < pool->nthr; i++ )
|
for( i = 0; i < pool->nthr; i++ )
|
||||||
pool->thr[i] = NULL;
|
pool->thr[i] = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user