* daemon/libvirtd.c (qemudStartWorker, qemudStartEventLoop): Avoid leaking pthread_attr resources. --- daemon/libvirtd.c | 36 ++++++++++++++++++++++++++---------- 1 files changed, 26 insertions(+), 10 deletions(-) diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index 2914f2f..14777dd 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -1600,15 +1600,20 @@ static void *qemudWorker(void *data) } } -static int qemudStartWorker(struct qemud_server *server, - struct qemud_worker *worker) { +static int +qemudStartWorker(struct qemud_server *server, + struct qemud_worker *worker) +{ pthread_attr_t attr; - pthread_attr_init(&attr); + int ret = -1; + + if (pthread_attr_init(&attr) != 0) + return -1; /* We want to join workers, so don't detach them */ /*pthread_attr_setdetachstate(&attr, 1);*/ if (worker->hasThread) - return -1; + goto cleanup; worker->server = server; worker->hasThread = 1; @@ -1621,10 +1626,13 @@ static int qemudStartWorker(struct qemud_server *server, worker) != 0) { worker->hasThread = 0; worker->server = NULL; - return -1; + goto cleanup; } - return 0; + ret = 0; +cleanup: + pthread_attr_destroy(&attr); + return ret; } @@ -2414,9 +2422,14 @@ cleanup: } -static int qemudStartEventLoop(struct qemud_server *server) { +static int +qemudStartEventLoop(struct qemud_server *server) +{ pthread_attr_t attr; - pthread_attr_init(&attr); + int ret = -1; + + if (pthread_attr_init(&attr) != 0) + return -1; /* We want to join the eventloop, so don't detach it */ /*pthread_attr_setdetachstate(&attr, 1);*/ @@ -2424,11 +2437,14 @@ static int qemudStartEventLoop(struct qemud_server *server) { &attr, qemudRunLoop, server) != 0) - return -1; + goto cleanup; server->hasEventThread = 1; - return 0; + ret = 0; +cleanup: + pthread_attr_destroy(&attr); + return ret; } -- 1.7.3.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list