diff options
| author | Donatas Abraitis <donatas@opensourcerouting.org> | 2024-07-25 13:25:06 +0300 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-25 13:25:06 +0300 | 
| commit | 4a582da39d0d1d12ba0b36489c43ce27c2b22666 (patch) | |
| tree | de7db4fc4a8c120a34e6c3153d30d10b645fdb3d | |
| parent | e612bc5075ffe09ecc41e8885dcd6729d5ce002b (diff) | |
| parent | 3284a7325a4c5b7382a13b0fa9c98409168368fe (diff) | |
Merge pull request #16459 from FRRouting/mergify/bp/stable/10.0/pr-16451
lib: mgmtd: fix too early daemon detach of mgmtd (backport #16451)
| -rw-r--r-- | lib/libfrr.c | 30 | ||||
| -rw-r--r-- | lib/libfrr.h | 2 | ||||
| -rw-r--r-- | lib/vty.c | 2 | 
3 files changed, 19 insertions, 15 deletions
diff --git a/lib/libfrr.c b/lib/libfrr.c index 2861ebe0b9..cb295f7e1b 100644 --- a/lib/libfrr.c +++ b/lib/libfrr.c @@ -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) */ @@ -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) @@ -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; @@ -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 ", @@ -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 */ diff --git a/lib/libfrr.h b/lib/libfrr.h index ee436d9f8f..8de881d5da 100644 --- a/lib/libfrr.h +++ b/lib/libfrr.h @@ -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, @@ -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();  }  | 
