[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