From 3ad71958ee8a572d162eca7f52bc5f6a9b5685d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Wed, 7 Sep 2022 10:05:42 +0100 Subject: [PATCH] ITS#9878 We no longer have to trigger li->li_conn_expire_task twice --- servers/slapd/back-ldap/bind.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/servers/slapd/back-ldap/bind.c b/servers/slapd/back-ldap/bind.c index 02fb60ea36..7665cb6ae7 100644 --- a/servers/slapd/back-ldap/bind.c +++ b/servers/slapd/back-ldap/bind.c @@ -3205,17 +3205,24 @@ ldap_back_schedule_conn_expiry( ldapinfo_t *li, ldapconn_t *lc ) { * timeout of this connection. * * If the task is already running, this connection cannot be next one - * to expire and therefore timeout does not need to be re-calculated. + * to expire (all connections share the same timeout) and therefore timeout + * does not need to be re-calculated. */ ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex ); if ( li->li_conn_expire_task == NULL ) { - li->li_conn_expire_task = ldap_pvt_runqueue_insert( &slapd_rq, - ldap_back_conn_expire_time( li, lc ) - slap_get_time(), + li->li_conn_expire_task = ldap_pvt_runqueue_insert( &slapd_rq, 0, ldap_back_conn_expire_fn, li, "ldap_back_conn_expire_fn", "ldap_back_conn_expire_timer" ); + + li->li_conn_expire_task->interval.tv_sec = + ldap_back_conn_expire_time( li, lc ) - slap_get_time(); + ldap_pvt_runqueue_resched( &slapd_rq, li->li_conn_expire_task, 0 ); Debug( LDAP_DEBUG_TRACE, "ldap_back_conn_prune: scheduled connection expiry timer to %ld sec\n", li->li_conn_expire_task->interval.tv_sec ); + + /* Make this a one-shot task */ + li->li_conn_expire_task->interval.tv_sec = 0; } ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );