+ ber_socket_t i;
+
+ ldap_pvt_thread_mutex_lock( &connections_mutex );
+
+ for ( i = 0; i < dtblsize; i++ ) {
+ if( connections[i].c_struct_state != SLAP_C_USED ) {
+ continue;
+ }
+
+ ldap_pvt_thread_mutex_lock( &connections[i].c_mutex );
+
+ /* connections_mutex and c_mutex are locked */
+ connection_closing( &connections[i] );
+ connection_close( &connections[i] );
+
+ ldap_pvt_thread_mutex_unlock( &connections[i].c_mutex );
+ }
+
+ ldap_pvt_thread_mutex_unlock( &connections_mutex );
+
+ 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 */
+
+ Connection *c;
+
+ Debug( LDAP_DEBUG_ARGS,
+ "connection_get(%ld)\n",
+ (long) s, 0, 0 );