Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lib: mgmtd: fix too early daemon detach of mgmtd #16451

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 17 additions & 13 deletions lib/libfrr.c
Original file line number Diff line number Diff line change
Expand Up @@ -1051,7 +1051,17 @@ void frr_config_fork(void)
zlog_tls_buffer_init();
}

void frr_vty_serv_start(void)
static void frr_check_detach(void)
{
if (nodetach_term || nodetach_daemon)
return;

if (daemon_ctl_sock != -1)
close(daemon_ctl_sock);
daemon_ctl_sock = -1;
}

void frr_vty_serv_start(bool check_detach)
{
/* allow explicit override of vty_path in the future
* (not currently set anywhere) */
Expand All @@ -1074,6 +1084,9 @@ void frr_vty_serv_start(void)
}

vty_serv_start(di->vty_addr, di->vty_port, di->vty_path);

if (check_detach)
frr_check_detach();
}

void frr_vty_serv_stop(void)
Expand All @@ -1084,16 +1097,6 @@ void frr_vty_serv_stop(void)
unlink(di->vty_path);
}

static void frr_check_detach(void)
{
if (nodetach_term || nodetach_daemon)
return;

if (daemon_ctl_sock != -1)
close(daemon_ctl_sock);
daemon_ctl_sock = -1;
}

static void frr_terminal_close(int isexit)
{
int nullfd;
Expand Down Expand Up @@ -1179,7 +1182,7 @@ void frr_run(struct event_loop *master)
char instanceinfo[64] = "";

if (!(di->flags & FRR_MANUAL_VTY_START))
frr_vty_serv_start();
frr_vty_serv_start(false);

if (di->instance)
snprintf(instanceinfo, sizeof(instanceinfo), "instance %u ",
Expand Down Expand Up @@ -1217,7 +1220,8 @@ void frr_run(struct event_loop *master)
close(nullfd);
}

frr_check_detach();
if (!(di->flags & FRR_MANUAL_VTY_START))
frr_check_detach();
}

/* end fixed stderr startup logging */
Expand Down
2 changes: 1 addition & 1 deletion lib/libfrr.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ extern void frr_config_fork(void);

extern void frr_run(struct event_loop *master);
extern void frr_detach(void);
extern void frr_vty_serv_start(void);
extern void frr_vty_serv_start(bool check_detach);
extern void frr_vty_serv_stop(void);

extern bool frr_zclient_addr(struct sockaddr_storage *sa, socklen_t *sa_len,
Expand Down
2 changes: 1 addition & 1 deletion lib/vty.c
Original file line number Diff line number Diff line change
Expand Up @@ -3502,7 +3502,7 @@ static void vty_mgmt_server_connected(struct mgmt_fe_client *client,

/* Start or stop listening for vty connections */
if (connected)
frr_vty_serv_start();
frr_vty_serv_start(true);
else
frr_vty_serv_stop();
}
Expand Down
Loading