chiark / gitweb /
[PATCH] fix udevd zombies
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>
Mon, 7 Jun 2004 09:56:47 +0000 (02:56 -0700)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 04:35:47 +0000 (21:35 -0700)
The recent version of klibc switched to -mregparm=3. This broke the
signal handlers parameter, cause it is called directly from the kernel
with the parameter on the stack not in a register.

udev.c
udevd.c

diff --git a/udev.c b/udev.c
index 192bed97d812238ba26a0c17610d6694afbb607d..eb21f7546104b0b287afdaaffe7857205a749665 100644 (file)
--- a/udev.c
+++ b/udev.c
@@ -55,7 +55,7 @@ void log_message(int level, const char *format, ...)
 }
 #endif
 
-static void sig_handler(int signum)
+__attribute__((regparm(0))) static void sig_handler(int signum)
 {
        switch (signum) {
                case SIGINT:
@@ -63,7 +63,7 @@ static void sig_handler(int signum)
                        udevdb_exit();
                        exit(20 + signum);
                default:
-                       dbg("unhandled signal");
+                       dbg("unhandled signal %d", signum);
        }
 }
 
@@ -128,7 +128,7 @@ static int udev_hotplug(void)
                goto exit;
        }
 
-       /* set up a default signal handler for now */
+       /* set signal handlers */
        act.sa_handler = sig_handler;
        sigemptyset (&act.sa_mask);
        act.sa_flags = SA_RESTART;
diff --git a/udevd.c b/udevd.c
index 5756b46122d0f03037c4b9521679fd53e2b14bab..e0c5bf5c779789f10d2faf0714dc812dacd0fa6f 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -306,9 +306,10 @@ skip:
        return;
 }
 
-static void sig_handler(int signum)
+__attribute__((regparm(0))) static void sig_handler(int signum)
 {
        int rc;
+
        switch (signum) {
                case SIGINT:
                case SIGTERM:
@@ -325,7 +326,7 @@ static void sig_handler(int signum)
                        goto do_write;
                        break;
                default:
-                       dbg("unhandled signal");
+                       dbg("unhandled signal %d", signum);
                        return;
        }