summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-06-07 02:56:47 -0700
committerGreg KH <gregkh@suse.de>2005-04-26 21:35:47 -0700
commit47bf9196c66a2a3dbb1b3a511dee933620616945 (patch)
tree593a3d8cc577f61d04507746653e5c045660e67f
parent0f36e68e8a28e02981b90a3a4712f198b58746ba (diff)
downloadsystemd-47bf9196c66a2a3dbb1b3a511dee933620616945.tar.gz
systemd-47bf9196c66a2a3dbb1b3a511dee933620616945.tar.bz2
systemd-47bf9196c66a2a3dbb1b3a511dee933620616945.zip
[PATCH] fix udevd zombies
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.
-rw-r--r--udev.c6
-rw-r--r--udevd.c5
2 files changed, 6 insertions, 5 deletions
diff --git a/udev.c b/udev.c
index 192bed97d8..eb21f75461 100644
--- 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 5756b46122..e0c5bf5c77 100644
--- 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;
}