Author: eelco
Date: Tue Mar 20 10:25:11 2012
New Revision: 33289
URL: https://nixos.org/websvn/nix/?rev=33289&sc=1

Log:
* Fix a race condition in mountall: the USR1 signal handler must be
  installed before we daemonise, otherwise another job might send 
  USR1 to mountall before the handler is installed, killing it.

Added:
   nixpkgs/trunk/pkgs/os-specific/linux/mountall/fix-usr1-race.patch
Modified:
   nixpkgs/trunk/pkgs/os-specific/linux/mountall/default.nix

Modified: nixpkgs/trunk/pkgs/os-specific/linux/mountall/default.nix
==============================================================================
--- nixpkgs/trunk/pkgs/os-specific/linux/mountall/default.nix   Tue Mar 20 
10:17:08 2012        (r33288)
+++ nixpkgs/trunk/pkgs/os-specific/linux/mountall/default.nix   Tue Mar 20 
10:25:11 2012        (r33289)
@@ -8,7 +8,7 @@
     sha256 = "1k52d4x75balnwcsqgznvzrdqgbp2dqnrzw0n25kajdcwr192wwy";
   };
 
-  patches = [ ./no-plymouth.patch ];
+  patches = [ ./no-plymouth.patch ./fix-usr1-race.patch ];
 
   preConfigure = "rm -R aclocal.m4; gettextize -f; autoreconf -vfi";
 

Added: nixpkgs/trunk/pkgs/os-specific/linux/mountall/fix-usr1-race.patch
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ nixpkgs/trunk/pkgs/os-specific/linux/mountall/fix-usr1-race.patch   Tue Mar 
20 10:25:11 2012        (r33289)
@@ -0,0 +1,27 @@
+diff -ru mountall-2.35-orig/src/mountall.c mountall-2.35/src/mountall.c
+--- mountall-2.35-orig/src/mountall.c  2012-03-20 11:01:14.035898815 +0100
++++ mountall-2.35/src/mountall.c       2012-03-20 11:20:39.194786311 +0100
+@@ -3746,6 +3746,12 @@
+               exit (EXIT_ERROR);
+       }
+ 
++      /* SIGUSR1 tells us that a network device came up.  Install
++           the handler before daemonising so that the mountall-net job
++           won't kill us by sending USR1. */
++      nih_signal_set_handler (SIGUSR1, nih_signal_handler);
++      NIH_MUST (nih_signal_add_handler (NULL, SIGUSR1, usr1_handler, NULL));
++
+       /* Become daemon */
+       if (daemonise) {
+               pid_t pid;
+@@ -3799,10 +3805,6 @@
+       nih_signal_set_handler (SIGTERM, nih_signal_handler);
+       NIH_MUST (nih_signal_add_handler (NULL, SIGTERM, nih_main_term_signal, 
NULL));
+ 
+-      /* SIGUSR1 tells us that a network device came up */
+-      nih_signal_set_handler (SIGUSR1, nih_signal_handler);
+-      NIH_MUST (nih_signal_add_handler (NULL, SIGUSR1, usr1_handler, NULL));
+-
+       /* Check for force-fsck on the kernel command line */
+       cmdline = fopen ("/proc/cmdline", "r");
+       if (cmdline) {
_______________________________________________
nix-commits mailing list
[email protected]
http://lists.science.uu.nl/mailman/listinfo/nix-commits

Reply via email to