]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/pcache.c
Fix cancel cleanup
[openldap] / servers / slapd / overlays / pcache.c
index e4135b982218da39c744362010fa5a1c0002278f..b078908da5f287bb588fa237c100b08c9eb055bd 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2003-2004 The OpenLDAP Foundation.
+ * Copyright 2003-2005 The OpenLDAP Foundation.
  * Portions Copyright 2003 IBM Corporation.
  * Portions Copyright 2003 Symas Corporation.
  * All rights reserved.
@@ -1123,12 +1123,12 @@ proxy_cache_response(
                         * wake it back up
                         */
                        if ( cm->cc_paused ) {
-                               ldap_pvt_thread_mutex_lock( &syncrepl_rq.rq_mutex );
+                               ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
                                if ( cm->cc_paused ) {
                                        cm->cc_paused = 0;
-                                       ldap_pvt_runqueue_resched( &syncrepl_rq, cm->cc_arg, 0 );
+                                       ldap_pvt_runqueue_resched( &slapd_rq, cm->cc_arg, 0 );
                                }
-                               ldap_pvt_thread_mutex_unlock( &syncrepl_rq.rq_mutex );
+                               ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
                        }
                }
 
@@ -1410,20 +1410,21 @@ consistency_check(
        slap_overinst *on = rtask->arg;
        cache_manager *cm = on->on_bi.bi_private;
        query_manager *qm = cm->qm;
-       Operation op = {0};
-       Opheader ohdr = {0};
        Connection conn = {0};
+       char opbuf[OPERATION_BUFFER_SIZE];
+       Operation *op;
 
        SlapReply rs = {REP_RESULT};
        CachedQuery* query, *query_prev;
        int i, return_val, pause = 1;
        QueryTemplate* templ;
 
-       connection_fake_init( &conn, &op, &ohdr, ctx );
+       op = (Operation *)opbuf;
+       connection_fake_init( &conn, op, ctx );
 
-       op.o_bd = &cm->db;
-       op.o_dn = cm->db.be_rootdn;
-       op.o_ndn = cm->db.be_rootndn;
+       op->o_bd = &cm->db;
+       op->o_dn = cm->db.be_rootdn;
+       op->o_ndn = cm->db.be_rootndn;
 
        cm->cc_arg = arg;
 
@@ -1431,9 +1432,9 @@ consistency_check(
                templ = qm->templates + i;
                query = templ->query_last;
                if ( query ) pause = 0;
-               op.o_time = slap_get_time();
+               op->o_time = slap_get_time();
                ldap_pvt_thread_mutex_lock(&cm->remove_mutex);
-               while (query && (query->expiry_time < op.o_time)) {
+               while (query && (query->expiry_time < op->o_time)) {
                        ldap_pvt_thread_mutex_lock(&qm->lru_mutex);
                        remove_query(qm, query);
                        ldap_pvt_thread_mutex_unlock(&qm->lru_mutex);
@@ -1446,7 +1447,7 @@ consistency_check(
                        Debug( LDAP_DEBUG_ANY, "Unlock CR index = %d\n",
                                        i, 0, 0 );
                        ldap_pvt_thread_rdwr_wunlock(&templ->t_rwlock);
-                       return_val = remove_query_data(&op, &rs, &query->q_uuid);
+                       return_val = remove_query_data(op, &rs, &query->q_uuid);
                        Debug( LDAP_DEBUG_ANY, "STALE QUERY REMOVED, SIZE=%d\n",
                                                return_val, 0, 0 );
                        ldap_pvt_thread_mutex_lock(&cm->cache_mutex);
@@ -1465,15 +1466,15 @@ consistency_check(
                }
                ldap_pvt_thread_mutex_unlock(&cm->remove_mutex);
        }
-       ldap_pvt_thread_mutex_lock( &syncrepl_rq.rq_mutex );
-       if ( ldap_pvt_runqueue_isrunning( &syncrepl_rq, rtask )) {
-               ldap_pvt_runqueue_stoptask( &syncrepl_rq, rtask );
+       ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
+       if ( ldap_pvt_runqueue_isrunning( &slapd_rq, rtask )) {
+               ldap_pvt_runqueue_stoptask( &slapd_rq, rtask );
        }
        /* If there were no queries, defer processing for a while */
        cm->cc_paused = pause;
-       ldap_pvt_runqueue_resched( &syncrepl_rq, rtask, pause );
+       ldap_pvt_runqueue_resched( &slapd_rq, rtask, pause );
 
-       ldap_pvt_thread_mutex_unlock( &syncrepl_rq.rq_mutex );
+       ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
        return NULL;
 }
 
@@ -1737,10 +1738,10 @@ proxy_cache_open(
 
        /* There is no runqueue in TOOL mode */
        if ( slapMode & SLAP_SERVER_MODE ) {
-               ldap_pvt_thread_mutex_lock( &syncrepl_rq.rq_mutex );
-               ldap_pvt_runqueue_insert( &syncrepl_rq, cm->cc_period,
+               ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
+               ldap_pvt_runqueue_insert( &slapd_rq, cm->cc_period,
                        consistency_check, on );
-               ldap_pvt_thread_mutex_unlock( &syncrepl_rq.rq_mutex );
+               ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
 
                /* Cached database must have the rootdn */
                if ( BER_BVISNULL( &cm->db.be_rootndn )