[vlc-commits] Reset signals for xdg-screensaver (fix #5414)

Rémi Denis-Courmont git at videolan.org
Wed Oct 5 23:20:30 CEST 2011


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Oct  5 20:40:54 2011 +0300| [9468ddbd1c00447d1ea71e3b044b23201b9151e9] | committer: Rémi Denis-Courmont

Reset signals for xdg-screensaver (fix #5414)

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

 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 056cf7f..cfb3b2a 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);
@@ -138,7 +152,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