]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9878 We no longer have to trigger li->li_conn_expire_task twice
authorOndřej Kuzník <ondra@mistotebe.net>
Wed, 7 Sep 2022 09:05:42 +0000 (10:05 +0100)
committerOndřej Kuzník <ondra@mistotebe.net>
Thu, 8 Sep 2022 07:31:22 +0000 (08:31 +0100)
servers/slapd/back-ldap/bind.c

index 02fb60ea360563007521f184c5b068c19eeeeab6..7665cb6ae7ff745a862f201b404d03fc6db16244 100644 (file)
@@ -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 );