vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sat Dec  4 
19:15:08 2010 +0200| [6bc9535c0a97e1ad3f8531ffd1dcbb5d565656ab] | committer: 
Rémi Denis-Courmont 

Win32: implement thread return value

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6bc9535c0a97e1ad3f8531ffd1dcbb5d565656ab
---

 src/win32/thread.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/win32/thread.c b/src/win32/thread.c
index 296013d..3650256 100644
--- a/src/win32/thread.c
+++ b/src/win32/thread.c
@@ -550,7 +550,7 @@ static unsigned __stdcall vlc_entry (void *p)
 
     vlc_threadvar_set (thread_key, th);
     th->killable = true;
-    th->entry (th->data);
+    th->data = th->entry (th->data);
     vlc_threadvar_cleanup ();
     if (th->detached)
         free (th);
@@ -628,10 +628,11 @@ void vlc_join (vlc_thread_t th, void **result)
                                                         == WAIT_IO_COMPLETION);
 
     CloseHandle (th->id);
-    assert (result == NULL); /* <- FIXME if ever needed */
 #ifdef UNDER_CE
     CloseHandle (th->cancel_event);
 #endif
+    if (result != NULL)
+        *result = th->data;
     free (th);
 }
 
@@ -694,6 +695,8 @@ void vlc_testcancel (void)
         /* Detached threads cannot be cancelled */
         assert (!th->detached);
 
+        th->data = NULL; /* TODO: special value? */
+
         for (vlc_cleanup_t *p = th->cleaners; p != NULL; p = p->next)
              p->proc (p->data);
         vlc_threadvar_cleanup ();

_______________________________________________
vlc-commits mailing list
[email protected]
http://mailman.videolan.org/listinfo/vlc-commits

Reply via email to