[vlc-commits] Reset signals for xdg-screensaver (fix #5414)
Rémi Denis-Courmont
git at videolan.org
Wed Oct 5 23:23:05 CEST 2011
vlc/vlc-1.1 | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Oct 5 20:40:54 2011 +0300| [128896a7252fd7ae6cbc32cccd36f507d64096d0] | committer: Rémi Denis-Courmont
Reset signals for xdg-screensaver (fix #5414)
(cherry picked from commit 9468ddbd1c00447d1ea71e3b044b23201b9151e9)
> http://git.videolan.org/gitweb.cgi/vlc/vlc-1.1.git/?a=commit;h=128896a7252fd7ae6cbc32cccd36f507d64096d0
---
modules/misc/inhibit/xdg.c | 17 ++++++++++++++++-
1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/modules/misc/inhibit/xdg.c b/modules/misc/inhibit/xdg.c
index 20a24ff..91df7ee 100644
--- a/modules/misc/inhibit/xdg.c
+++ b/modules/misc/inhibit/xdg.c
@@ -46,6 +46,7 @@ struct vlc_inhibit_sys
vlc_thread_t thread;
vlc_cond_t update, inactive;
vlc_mutex_t lock;
+ posix_spawnattr_t attr;
bool suspend, suspended;
};
@@ -65,6 +66,18 @@ static int Open (vlc_object_t *obj)
vlc_mutex_init (&p_sys->lock);
vlc_cond_init (&p_sys->update);
vlc_cond_init (&p_sys->inactive);
+ posix_spawnattr_init (&p_sys->attr);
+ /* Reset signal handlers to default and clear mask in the child process */
+ {
+ sigset_t set;
+
+ sigemptyset (&set);
+ posix_spawnattr_setsigmask (&p_sys->attr, &set);
+ sigaddset (&set, SIGPIPE);
+ posix_spawnattr_setsigdefault (&p_sys->attr, &set);
+ posix_spawnattr_setflags (&p_sys->attr, POSIX_SPAWN_SETSIGDEF
+ | POSIX_SPAWN_SETSIGMASK);
+ }
p_sys->suspend = false;
p_sys->suspended = false;
@@ -92,6 +105,7 @@ static void Close (vlc_object_t *obj)
vlc_cancel (p_sys->thread);
vlc_join (p_sys->thread, NULL);
+ posix_spawnattr_destroy (&p_sys->attr);
vlc_cond_destroy (&p_sys->inactive);
vlc_cond_destroy (&p_sys->update);
vlc_mutex_destroy (&p_sys->lock);
@@ -137,7 +151,8 @@ static void *Thread (void *data)
pid_t pid;
vlc_mutex_unlock (&p_sys->lock);
- if (!posix_spawnp (&pid, "xdg-screensaver", NULL, NULL, argv, environ))
+ if (!posix_spawnp (&pid, "xdg-screensaver", NULL, &p_sys->attr,
+ argv, environ))
{
int status;
More information about the vlc-commits
mailing list