]> git.sesse.net Git - vlc/commitdiff
android: fix detached threads leak
authorRafaël Carré <funman@videolan.org>
Wed, 17 Oct 2012 11:12:50 +0000 (13:12 +0200)
committerRafaël Carré <funman@videolan.org>
Wed, 17 Oct 2012 11:13:09 +0000 (13:13 +0200)
src/android/thread.c

index 2715388d239d102e13c97bd5456f127c94c459b7..7d15b2d7d7b6658fd678d826f09bdaed9862c8d5 100644 (file)
@@ -308,17 +308,25 @@ int vlc_cond_timedwait (vlc_cond_t *condvar, vlc_mutex_t *p_mutex,
 }
 
 /* pthread */
+static void clean_detached_thread(void *data)
+{
+    struct vlc_thread *thread = data;
+
+    /* release thread handle */
+    vlc_mutex_destroy(&thread->lock);
+    free(thread);
+}
 
 static void *detached_thread(void *data)
 {
     vlc_thread_t th = data;
 
     thread = th;
+
+    vlc_cleanup_push(clean_detached_thread, data);
     th->entry(th->data);
+    vlc_cleanup_run();
 
-    /* release thread handle */
-    vlc_mutex_destroy(&th->lock);
-    free(th);
     return NULL;
 }
 
@@ -454,7 +462,6 @@ void vlc_testcancel (void)
         return;
 
     vlc_sem_post(&thread->finished);
-#warning FIXME: memory leak for detached threads
     pthread_exit(NULL);
 }