1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-03 13:47:25 +03:00

r23502: Restore exit-on-idle. Small refactoring for clarity. Exit if

we are idle and we timed out waiting for something to do.
(This used to be commit b4ab1a0cd992cf9e966b8edb9796d1eae53db744)
This commit is contained in:
James Peach 2007-06-14 18:48:51 +00:00 committed by Gerald (Jerry) Carter
parent 59c872103d
commit 4a3e4db1cd

View File

@ -315,6 +315,16 @@ static BOOL allowable_number_of_smbd_processes(void)
return num_children < max_processes;
}
/****************************************************************************
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));