diff options
-rw-r--r-- | source3/smbd/server.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 98b9fb8626..532de36bf8 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -316,6 +316,16 @@ static BOOL allowable_number_of_smbd_processes(void) } /**************************************************************************** + Are we idle enough that we could safely exit? +****************************************************************************/ + +static BOOL smbd_is_idle(void) +{ + /* Currently we define "idle" as having no client connections. */ + return count_all_current_connections() == 0; +} + +/**************************************************************************** Open the socket communication. ****************************************************************************/ @@ -414,10 +424,22 @@ static BOOL open_sockets_smbd(enum smb_server_mode server_mode, const char *smb_ &r_fds, &w_fds, &idle_timeout, &maxfd); - num = sys_select(maxfd+1,&r_fds,&w_fds,NULL, - timeval_is_zero(&idle_timeout) ? - NULL : &idle_timeout); - + if (timeval_is_zero(&idle_timeout)) { + num = sys_select(maxfd + 1, &r_fds, &w_fds, + NULL, NULL); + } else { + num = sys_select(maxfd + 1, &r_fds, &w_fds, + NULL, &idle_timeout); + + /* If the idle timeout fired and we are idle, exit + * gracefully. We expect to be running under a process + * controller that will restart us if necessry. + */ + if (num == 0 && smbd_is_idle()) { + exit_server_cleanly("idle timeout"); + } + } + if (num == -1 && errno == EINTR) { if (got_sig_term) { exit_server_cleanly(NULL); @@ -438,19 +460,6 @@ static BOOL open_sockets_smbd(enum smb_server_mode server_mode, const char *smb_ continue; } -#if 0 - Deactivated for now, this needs to become a timed event - vl - - /* If the idle timeout fired and we don't have any connected - * users, exit gracefully. We should be running under a process - * controller that will restart us if necessry. - */ - if (num == 0 && count_all_current_connections() == 0) { - exit_server_cleanly("idle timeout"); - } -#endif - /* check if we need to reload services */ check_reload(time(NULL)); |