aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-11-05 13:16:32 +0100
committerGreg KH <gregkh@suse.de>2005-04-26 22:09:26 -0700
commit5a73b25fd6673134328443af04afe7bde0060d72 (patch)
treede593704b0c3554195a10f8464b18ec9e731c2e7
parenta5d00f9d3725c701d5a2d7a14dfcc7864aac27fb (diff)
downloadudev-5a73b25fd6673134328443af04afe7bde0060d72.tar.gz
[PATCH] Don't use any syslog() in signal handler, cause it may deadlock.
-rw-r--r--udev.c5
-rw-r--r--udev.h2
-rw-r--r--udevd.c9
3 files changed, 4 insertions, 12 deletions
diff --git a/udev.c b/udev.c
index cac60fd9..78090605 100644
--- a/udev.c
+++ b/udev.c
@@ -65,14 +65,10 @@ static void asmlinkage sig_handler(int signum)
switch (signum) {
case SIGALRM:
gotalarm = 1;
- info("error: timeout reached, event probably not handled correctly");
break;
case SIGINT:
case SIGTERM:
- udevdb_exit();
exit(20 + signum);
- default:
- dbg("unhandled signal %d", signum);
}
}
@@ -148,6 +144,7 @@ int main(int argc, char *argv[], char *envp[])
/* set signal handlers */
act.sa_handler = (void (*) (int))sig_handler;
sigemptyset (&act.sa_mask);
+ act.sa_flags = 0;
/* alarm must not restart syscalls*/
sigaction(SIGALRM, &act, NULL);
sigaction(SIGINT, &act, NULL);
diff --git a/udev.h b/udev.h
index f7a13a63..e8954338 100644
--- a/udev.h
+++ b/udev.h
@@ -26,7 +26,7 @@
#include <sys/param.h>
#include "libsysfs/sysfs/libsysfs.h"
-#define ALARM_TIMEOUT 30
+#define ALARM_TIMEOUT 120
#define COMMENT_CHARACTER '#'
#define NAME_SIZE 256
diff --git a/udevd.c b/udevd.c
index 01508371..395cdca8 100644
--- a/udevd.c
+++ b/udevd.c
@@ -327,20 +327,15 @@ static void asmlinkage sig_handler(int signum)
sigchilds_waiting = 1;
goto do_write;
break;
- default:
- dbg("unhandled signal %d", signum);
- return;
}
-
+
do_write:
/* if pipe is empty, write to pipe to force select to return
* immediately when it gets called
*/
if (!sig_flag) {
rc = write(pipefds[1],&signum,sizeof(signum));
- if (rc < 0)
- dbg("unable to write to pipe");
- else
+ if (rc >= 0)
sig_flag = 1;
}
}