}
/* 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;
}
return;
vlc_sem_post(&thread->finished);
-#warning FIXME: memory leak for detached threads
pthread_exit(NULL);
}