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:
parent
59c872103d
commit
4a3e4db1cd
@ -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));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user