[libvirt] [PATCH v4 1/7] bug: local var referenced in another thread

Hu Tao hutao at cn.fujitsu.com
Thu Dec 2 01:04:36 UTC 2010


---
 src/util/threads-pthread.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/util/threads-pthread.c b/src/util/threads-pthread.c
index 02070ae..54a3808 100644
--- a/src/util/threads-pthread.c
+++ b/src/util/threads-pthread.c
@@ -26,6 +26,7 @@
 # include <sys/syscall.h>
 #endif
 
+#include "memory.h"
 
 /* Nothing special required for pthreads */
 int virThreadInitialize(void)
@@ -143,6 +144,7 @@ static void *virThreadHelper(void *data)
 {
     struct virThreadArgs *args = data;
     args->func(args->opaque);
+    VIR_FREE(args);
     return NULL;
 }
 
@@ -151,13 +153,20 @@ int virThreadCreate(virThreadPtr thread,
                     virThreadFunc func,
                     void *opaque)
 {
-    struct virThreadArgs args = { func, opaque };
+    struct virThreadArgs *args;
     pthread_attr_t attr;
+
+    if (VIR_ALLOC(args) < 0)
+        return -1;
+
+    args->func = func;
+    args->opaque = opaque;
+
     pthread_attr_init(&attr);
     if (!joinable)
         pthread_attr_setdetachstate(&attr, 1);
 
-    int ret = pthread_create(&thread->thread, &attr, virThreadHelper, &args);
+    int ret = pthread_create(&thread->thread, &attr, virThreadHelper, args);
     if (ret != 0) {
         errno = ret;
         return -1;
-- 
1.7.3


-- 
Thanks,
Hu Tao




More information about the libvir-list mailing list