From: Denys Vlasenko Date: Tue, 26 Nov 2013 11:02:18 +0000 (+0100) Subject: logread: don't call shmdt() before exit, kernel does it for us. X-Git-Tag: 1_22_0~33 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=26ad256bd0badc17d70f347c27cf5ed0699eccc5;p=oweals%2Fbusybox.git logread: don't call shmdt() before exit, kernel does it for us. function old new delta logread_main 472 466 -6 interrupted 20 9 -11 error_exit 20 - -20 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 0/2 up/down: 0/-37) Total: -37 bytes Signed-off-by: Denys Vlasenko --- diff --git a/sysklogd/logread.c b/sysklogd/logread.c index 53d771d28..92a562919 100644 --- a/sysklogd/logread.c +++ b/sysklogd/logread.c @@ -49,6 +49,7 @@ struct globals { memcpy(SMrup, init_sem, sizeof(init_sem)); \ } while (0) +#if 0 static void error_exit(const char *str) NORETURN; static void error_exit(const char *str) { @@ -56,6 +57,10 @@ static void error_exit(const char *str) shmdt(shbuf); bb_perror_msg_and_die(str); } +#else +/* On Linux, shmdt is not mandatory on exit */ +# define error_exit(str) bb_perror_msg_and_die(str) +#endif /* * sem_up - up()'s a semaphore. @@ -68,7 +73,7 @@ static void sem_up(int semid) static void interrupted(int sig) { - shmdt(shbuf); + /* shmdt(shbuf); - on Linux, shmdt is not mandatory on exit */ kill_myself_with_sig(sig); } @@ -84,12 +89,12 @@ int logread_main(int argc UNUSED_PARAM, char **argv) log_shmid = shmget(KEY_ID, 0, 0); if (log_shmid == -1) - bb_perror_msg_and_die("can't find syslogd buffer"); + bb_perror_msg_and_die("can't %s syslogd buffer", "find"); /* Attach shared memory to our char* */ shbuf = shmat(log_shmid, NULL, SHM_RDONLY); if (shbuf == NULL) - bb_perror_msg_and_die("can't access syslogd buffer"); + bb_perror_msg_and_die("can't %s syslogd buffer", "access"); log_semid = semget(KEY_ID, 0, 0); if (log_semid == -1) @@ -185,7 +190,7 @@ int logread_main(int argc UNUSED_PARAM, char **argv) fflush_all(); } while (follow); - shmdt(shbuf); + /* shmdt(shbuf); - on Linux, shmdt is not mandatory on exit */ fflush_stdout_and_exit(EXIT_SUCCESS); }