logread: intercept all fatal signals, not just SIGINT
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 28 Jul 2013 21:17:00 +0000 (23:17 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 28 Jul 2013 21:17:00 +0000 (23:17 +0200)
function                                             old     new   delta
interrupted                                           27      20      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
sysklogd/logread.c

index 9939569040d3640e5d46181fa9c05fb3e2d27f1d..2b6415f474d2a3e1787b08d1d4da994b42cd23fd 100644 (file)
@@ -52,7 +52,7 @@ struct globals {
 static void error_exit(const char *str) NORETURN;
 static void error_exit(const char *str)
 {
-       //release all acquired resources
+       /* Release all acquired resources */
        shmdt(shbuf);
        bb_perror_msg_and_die(str);
 }
@@ -66,11 +66,10 @@ static void sem_up(int semid)
                error_exit("semop[SMrup]");
 }
 
-static void interrupted(int sig UNUSED_PARAM)
+static void interrupted(int sig)
 {
-       signal(SIGINT, SIG_IGN);
        shmdt(shbuf);
-       exit(EXIT_SUCCESS);
+       kill_myself_with_sig(sig);
 }
 
 int logread_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
@@ -96,7 +95,7 @@ int logread_main(int argc UNUSED_PARAM, char **argv)
        if (log_semid == -1)
                error_exit("can't get access to semaphores for syslogd buffer");
 
-       signal(SIGINT, interrupted);
+       bb_signals(BB_FATAL_SIGS, interrupted);
 
        /* Suppose atomic memory read */
        /* Max possible value for tail is shbuf->size - 1 */