logread: don't call shmdt() before exit, kernel does it for us.
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 26 Nov 2013 11:02:18 +0000 (12:02 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 26 Nov 2013 11:02:18 +0000 (12:02 +0100)
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 <vda.linux@googlemail.com>
sysklogd/logread.c

index 53d771d280e1bd8ef3b4b6de9bdc1f819b0027c4..92a562919fa11d686b756fbe040d0ac300df2f26 100644 (file)
@@ -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);
 }