]> git.sur5r.net Git - openldap/commitdiff
wake listener when scheduling qtask so it can run immediately
authorHoward Chu <hyc@openldap.org>
Fri, 6 Jan 2006 20:38:14 +0000 (20:38 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 6 Jan 2006 20:38:14 +0000 (20:38 +0000)
servers/slapd/overlays/syncprov.c

index a6deda4a991a8ac3fafdd0f5c725cf52a4078733..197c11c2b3b368ec08165aaa569abd089c8c39fd 100644 (file)
@@ -949,12 +949,14 @@ syncprov_qresp( opcookie *opc, syncops *so, int mode )
                so->s_flags |= PS_FIND_BASE;
        }
        if ( so->s_flags & PS_IS_DETACHED ) {
+               int wake=0;
                ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
                if ( !so->s_qtask ) {
                        so->s_qtask = ldap_pvt_runqueue_insert( &slapd_rq, RUNQ_INTERVAL,
                                syncprov_qtask, so, "syncprov_qtask",
                                so->s_op->o_conn->c_peer_name.bv_val );
                        ++so->s_inuse;
+                       wake = 1;
                } else {
                        if (!ldap_pvt_runqueue_isrunning( &slapd_rq, so->s_qtask ) &&
                                !so->s_qtask->next_sched.tv_sec ) {
@@ -962,9 +964,12 @@ syncprov_qresp( opcookie *opc, syncops *so, int mode )
                                ldap_pvt_runqueue_resched( &slapd_rq, so->s_qtask, 0 );
                                so->s_qtask->interval.tv_sec = RUNQ_INTERVAL;
                                ++so->s_inuse;
+                               wake = 1;
                        }
                }
                ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
+               if ( wake )
+                       slap_wake_listener();
        }
        ldap_pvt_thread_mutex_unlock( &so->s_mutex );
        return LDAP_SUCCESS;