diff options
author | Denys Vlasenko | 2023-10-03 17:18:41 +0200 |
---|---|---|
committer | Denys Vlasenko | 2023-10-03 19:16:10 +0200 |
commit | 5fa39d48d53c7a3360d4f4da2c00232eb674678e (patch) | |
tree | 59c07e467a97acfa16cd647ef5c8cf00baaa183d /sysklogd | |
parent | 92ab29fcf04bc3ff3d3ad897f1c2463d8b8d1410 (diff) | |
download | busybox-5fa39d48d53c7a3360d4f4da2c00232eb674678e.zip busybox-5fa39d48d53c7a3360d4f4da2c00232eb674678e.tar.gz |
syslogd: fix breakage caused by "daemonize _after_ init" change
function old new delta
syslogd_init 1007 1140 +133
create_socket 143 - -143
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/0 up/down: 133/-143) Total: -10 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'sysklogd')
-rw-r--r-- | sysklogd/syslogd.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/sysklogd/syslogd.c b/sysklogd/syslogd.c index 83b5c0c..7558051 100644 --- a/sysklogd/syslogd.c +++ b/sysklogd/syslogd.c @@ -956,9 +956,7 @@ static void do_mark(int sig) } #endif -/* Don't inline: prevent struct sockaddr_un to take up space on stack - * permanently */ -static NOINLINE int create_socket(void) +static int create_socket(void) { struct sockaddr_un sunx; int sock_fd; @@ -1008,6 +1006,7 @@ static int try_to_resolve_remote(remoteHost_t *rh) static int NOINLINE syslogd_init(char **argv) { int opts; + int fd; char OPTION_DECL; #if ENABLE_FEATURE_REMOTE_LOG llist_t *remoteAddrList = NULL; @@ -1055,7 +1054,7 @@ static int NOINLINE syslogd_init(char **argv) G.hostname = safe_gethostname(); *strchrnul(G.hostname, '.') = '\0'; - xmove_fd(create_socket(), STDIN_FILENO); + fd = create_socket(); if (opts & OPT_circularlog) ipcsyslog_init(); @@ -1067,6 +1066,8 @@ static int NOINLINE syslogd_init(char **argv) bb_daemonize_or_rexec(DAEMON_CHDIR_ROOT, argv); } + xmove_fd(fd, STDIN_FILENO); + /* Set up signal handlers (so that they interrupt read()) */ signal_no_SA_RESTART_empty_mask(SIGTERM, record_signo); signal_no_SA_RESTART_empty_mask(SIGINT, record_signo); |