Skip to content

Commit

Permalink
Merge pull request FRRouting#16459 from FRRouting/mergify/bp/stable/1…
Browse files Browse the repository at this point in the history
…0.0/pr-16451

lib: mgmtd: fix too early daemon detach of mgmtd (backport FRRouting#16451)
  • Loading branch information
ton31337 authored Jul 25, 2024
2 parents e612bc5 + 3284a73 commit 4a582da
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 15 deletions.
30 changes: 17 additions & 13 deletions lib/libfrr.c
Original file line number Diff line number Diff line change
Expand Up @@ -1035,7 +1035,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 @@ -1058,6 +1068,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 @@ -1068,16 +1081,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 @@ -1163,7 +1166,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 @@ -1201,7 +1204,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 @@ -200,7 +200,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 @@ -3486,7 +3486,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

0 comments on commit 4a582da

Please sign in to comment.