[libvirt] [PATCH] virThreadPoolFree: Join worker threads

Daniel P. Berrange berrange at redhat.com
Wed Dec 4 15:35:29 UTC 2013


On Wed, Dec 04, 2013 at 02:05:24PM +0100, Michal Privoznik wrote:
> Even though currently we are freeing the pool of worker threads at the
> daemon very end, nothing holds us back in joining the worker threads.
> Moreover, we avoid leaks like this:
> 
> ==26697== 1,680 bytes in 5 blocks are possibly lost in loss record 913 of 942
> ==26697==    at 0x4C2BDE4: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==26697==    by 0x4011131: allocate_dtv (in /lib64/ld-2.16.so)
> ==26697==    by 0x401176D: _dl_allocate_tls (in /lib64/ld-2.16.so)
> ==26697==    by 0x8499602: pthread_create@@GLIBC_2.2.5 (in /lib64/libpthread-2.16.so)
> ==26697==    by 0x52F53E9: virThreadCreate (virthreadpthread.c:188)
> ==26697==    by 0x52F5D4F: virThreadPoolNew (virthreadpool.c:221)
> ==26697==    by 0x53F30DB: virNetServerNew (virnetserver.c:377)
> ==26697==    by 0x11C6ED: main (libvirtd.c:1366)
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/util/virthreadpool.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/src/util/virthreadpool.c b/src/util/virthreadpool.c
> index b1e2c0c..99f36ec 100644
> --- a/src/util/virthreadpool.c
> +++ b/src/util/virthreadpool.c
> @@ -241,6 +241,9 @@ void virThreadPoolFree(virThreadPoolPtr pool)
>  {
>      virThreadPoolJobPtr job;
>      bool priority = false;
> +    size_t i;
> +    size_t nWorkers = pool->nWorkers;
> +    size_t nPrioWorkers = pool->nPrioWorkers;
>  
>      if (!pool)
>          return;
> @@ -262,6 +265,12 @@ void virThreadPoolFree(virThreadPoolPtr pool)
>          VIR_FREE(job);
>      }
>  
> +    for (i = 0; i < nWorkers; i++)
> +        virThreadJoin(&pool->workers[i]);
> +
> +    for (i = 0; i < nPrioWorkers; i++)
> +        virThreadJoin(&pool->prioWorkers[i]);
> +
>      VIR_FREE(pool->workers);
>      virMutexUnlock(&pool->mutex);
>      virMutexDestroy(&pool->mutex);

ACK, looks nicer

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list