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>
master
Denys Vlasenko 2023-10-03 17:18:41 +02:00
parent 92ab29fcf0
commit 5fa39d48d5
1 changed files with 5 additions and 4 deletions

View File

@ -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);