From: kay.sievers@vrfy.org Date: Fri, 5 Nov 2004 12:16:32 +0000 (+0100) Subject: [PATCH] Don't use any syslog() in signal handler, cause it may deadlock. X-Git-Tag: 043~9 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=5a73b25fd6673134328443af04afe7bde0060d72;ds=sidebyside [PATCH] Don't use any syslog() in signal handler, cause it may deadlock. --- diff --git a/udev.c b/udev.c index cac60fd93..780906052 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 f7a13a634..e8954338d 100644 --- a/udev.h +++ b/udev.h @@ -26,7 +26,7 @@ #include #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 015083714..395cdca88 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; } }