+ )
+ tvp = &tv;
+ else
+ tvp = NULL;
+
+ ldap_pvt_thread_mutex_lock( &syncrepl_rq.rq_mutex );
+ rtask = ldap_pvt_runqueue_next_sched( &syncrepl_rq, &cat );
+ while ( cat && cat->tv_sec && cat->tv_sec <= now ) {
+ if ( ldap_pvt_runqueue_isrunning( &syncrepl_rq, rtask )) {
+ ldap_pvt_runqueue_resched( &syncrepl_rq, rtask, 0 );
+ } else {
+ ldap_pvt_runqueue_runtask( &syncrepl_rq, rtask );
+ ldap_pvt_runqueue_resched( &syncrepl_rq, rtask, 0 );
+ ldap_pvt_thread_mutex_unlock( &syncrepl_rq.rq_mutex );
+ ldap_pvt_thread_pool_submit( &connection_pool,
+ rtask->routine, (void *) rtask );
+ ldap_pvt_thread_mutex_lock( &syncrepl_rq.rq_mutex );
+ }
+ rtask = ldap_pvt_runqueue_next_sched( &syncrepl_rq, &cat );
+ }
+ ldap_pvt_thread_mutex_unlock( &syncrepl_rq.rq_mutex );
+
+ if ( cat != NULL ) {
+ time_t diff = difftime( cat->tv_sec, now );
+ if ( diff == 0 )
+ diff = tdelta;
+ if ( tvp == NULL || diff < tv.tv_sec ) {
+ tv.tv_sec = diff;
+ tv.tv_usec = 0;
+ tvp = &tv;
+ }
+ }