logread: intercept all fatal signals, not just SIGINT

function                                             old     new   delta
interrupted                                           27      20      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2013-07-28 23:17:00 +02:00
parent fd3ac96c0f
commit 2641426187

View File

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