mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-07 14:18:15 +08:00
experimental connections_timeout_idle() implementation.
This commit is contained in:
parent
b91a837296
commit
2d720643be
@ -137,6 +137,35 @@ int connections_shutdown(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Timeout idle connections.
|
||||
*/
|
||||
int connections_timeout_idle(time_t now)
|
||||
{
|
||||
int i = 0;
|
||||
int connindex;
|
||||
Connection* c;
|
||||
|
||||
ldap_pvt_thread_mutex_lock( &connections_mutex );
|
||||
|
||||
for( c = connection_first( &connindex );
|
||||
c != NULL;
|
||||
c = connection_next( c, &connindex ) )
|
||||
{
|
||||
if( difftime( c->c_activitytime+global_idletimeout, now) < 0 ) {
|
||||
/* close it */
|
||||
connection_closing( c );
|
||||
connection_close( c );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
connection_done( c );
|
||||
|
||||
ldap_pvt_thread_mutex_unlock( &connections_mutex );
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
static Connection* connection_get( ber_socket_t s )
|
||||
{
|
||||
/* connections_mutex should be locked by caller */
|
||||
|
@ -330,8 +330,13 @@ slapd_daemon_task(
|
||||
ber_socket_t i;
|
||||
int ns;
|
||||
ber_socket_t nfds;
|
||||
int ebadf = 0;
|
||||
#define SLAPD_EBADF_LIMIT 10
|
||||
int ebadf = 0;
|
||||
|
||||
#define SLAPD_IDLE_CHECK_LIMIT 4
|
||||
time_t last_idle_check = slap_get_time();
|
||||
time_t now;
|
||||
|
||||
|
||||
fd_set readfds;
|
||||
fd_set writefds;
|
||||
@ -346,6 +351,12 @@ slapd_daemon_task(
|
||||
char *client_name;
|
||||
char *client_addr;
|
||||
|
||||
if( global_idletimeout > 0 &&
|
||||
difftime( last_idle_check+global_idletimeout, now ) < 0 )
|
||||
{
|
||||
connections_timeout_idle(now);
|
||||
}
|
||||
|
||||
FD_ZERO( &writefds );
|
||||
FD_ZERO( &readfds );
|
||||
|
||||
|
@ -128,6 +128,7 @@ int read_config LDAP_P(( char *fname ));
|
||||
int connections_init LDAP_P((void));
|
||||
int connections_shutdown LDAP_P((void));
|
||||
int connections_destroy LDAP_P((void));
|
||||
int connections_timeout_idle LDAP_P((time_t));
|
||||
|
||||
long connection_init LDAP_P((
|
||||
ber_socket_t s,
|
||||
|
Loading…
Reference in New Issue
Block a user