Commit 9565a093 authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

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

parent 003c1216
...@@ -78,6 +78,12 @@ static void Close (vlc_object_t *obj) ...@@ -78,6 +78,12 @@ static void Close (vlc_object_t *obj)
intf_sys_t *p_sys = intf->p_sys; intf_sys_t *p_sys = intf->p_sys;
pthread_cancel (p_sys->thread); 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); pthread_join (p_sys->thread, NULL);
free (p_sys); free (p_sys);
} }
...@@ -102,6 +108,12 @@ static void *SigThread (void *data) ...@@ -102,6 +108,12 @@ static void *SigThread (void *data)
sigwait (&set, &signum); 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); vlc_object_lock (obj);
p_sys->signum = signum; p_sys->signum = signum;
vlc_object_signal_unlocked (obj); vlc_object_signal_unlocked (obj);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment