On 12/13/2010 04:20 PM, Matthias Bolte wrote: > 2010/12/13 Eric Blake <ebl...@redhat.com>: >> * daemon/libvirtd.c (qemudStartWorker, qemudStartEventLoop): Avoid >> leaking pthread_attr resources. >> --- >> daemon/libvirtd.c | 36 ++++++++++++++++++++++++++---------- >> 1 files changed, 26 insertions(+), 10 deletions(-) >> > > ACK.
Thanks. Hmm, src/util/threads-pthread.c had the same leak; I'm squashing this in, then pushing. diff --git i/src/util/threads-pthread.c w/src/util/threads-pthread.c index c406f27..1653396 100644 --- i/src/util/threads-pthread.c +++ w/src/util/threads-pthread.c @@ -157,9 +157,15 @@ int virThreadCreate(virThreadPtr thread, { struct virThreadArgs *args; pthread_attr_t attr; - pthread_attr_init(&attr); - if (VIR_ALLOC(args) < 0) + int ret = -1; + int err; + + if ((err = pthread_attr_init(&attr)) != 0) goto cleanup; + if (VIR_ALLOC(args) < 0) { + err = ENOMEM; + goto cleanup; + } args->func = func; args->opaque = opaque; @@ -167,14 +173,19 @@ int virThreadCreate(virThreadPtr thread, if (!joinable) pthread_attr_setdetachstate(&attr, 1); - int ret = pthread_create(&thread->thread, &attr, virThreadHelper, args); - if (ret != 0) { + err = pthread_create(&thread->thread, &attr, virThreadHelper, args); + if (err != 0) { VIR_FREE(args); - errno = ret; - return -1; + goto cleanup; } /* New thread owns 'args' in success case, so don't free */ - return 0; + + ret = 0; +cleanup: + pthread_attr_destroy(&attr); + if (ret < 0) + errno = err; + return ret; } void virThreadSelf(virThreadPtr thread) -- Eric Blake ebl...@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list