[vlc-devel] commit: signals: Workaround the fact that sigwait() isn' t a pthread cancellation point on Mac OS X. (Pierre d'Herbemont )

git version control git at videolan.org
Thu May 29 23:46:44 CEST 2008


vlc | branch: master | Pierre d'Herbemont <pdherbemont at videolan.org> | Thu May 29 23:47:17 2008 +0200| [9565a093f9fce8aa15e54990e9fd9d3086b41b08]

signals: Workaround the fact that sigwait() isn't a pthread cancellation point on Mac OS X.

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

 modules/control/signals.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/modules/control/signals.c b/modules/control/signals.c
index c9fd67e..5180aa7 100644
--- a/modules/control/signals.c
+++ b/modules/control/signals.c
@@ -78,6 +78,12 @@ static void Close (vlc_object_t *obj)
     intf_sys_t *p_sys = intf->p_sys;
 
     pthread_cancel (p_sys->thread);
+#ifdef __APPLE__
+   /* In Mac OS X up to 10.5 sigwait (among others) is not a pthread
+    * cancellation point, so we throw a dummy quit signal to end
+    * sigwait() in the sigth thread */
+    pthread_kill (p_sys->thread, SIGQUIT);
+# endif
     pthread_join (p_sys->thread, NULL);
     free (p_sys);
 }
@@ -102,6 +108,12 @@ static void *SigThread (void *data)
 
         sigwait (&set, &signum);
 
+#ifdef __APPLE__
+        /* In Mac OS X up to 10.5 sigwait (among others) is not a pthread
+         * cancellation point */
+        pthread_testcancel();
+#endif
+
         vlc_object_lock (obj);
         p_sys->signum = signum;
         vlc_object_signal_unlocked (obj);




More information about the vlc-devel mailing list