]> git.sur5r.net Git - openldap/commitdiff
Revert cache-purge task, go back to purging inline
authorHoward Chu <hyc@openldap.org>
Wed, 5 Apr 2006 07:17:11 +0000 (07:17 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 5 Apr 2006 07:17:11 +0000 (07:17 +0000)
servers/slapd/back-bdb/back-bdb.h
servers/slapd/back-bdb/cache.c

index 4405d82f50e2a796eb33a100260c300238848235..c6788417e9a3a1a34b76d083fabd12eb6d662244 100644 (file)
@@ -180,7 +180,6 @@ struct bdb_info {
        u_int32_t       bi_txn_cp_kbyte;
        struct re_s             *bi_txn_cp_task;
        struct re_s             *bi_index_task;
-       struct re_s             *bi_cache_task;
 
        int                     bi_lock_detect;
        long            bi_shm_key;
index db71ca70cea7e19f6ae097993412cb76ecc99242..4bff759a9e14febe0c78280a9b83661b7343feb9 100644 (file)
@@ -186,8 +186,10 @@ bdb_cache_entryinfo_destroy( EntryInfo *e )
        } \
        (cache)->c_lruhead = (ei); \
        (ei)->bei_lruprev = NULL; \
-       if ( (cache)->c_lrutail == NULL ) { \
-               (cache)->c_lrutail = (ei); \
+       if ( !ldap_pvt_thread_mutex_trylock( &(cache)->lru_tail_mutex )) { \
+               if ( (cache)->c_lrutail == NULL ) \
+                       (cache)->c_lrutail = (ei); \
+               ldap_pvt_thread_mutex_unlock( &(cache)->lru_tail_mutex ); \
        } \
 } while(0)
 
@@ -529,15 +531,25 @@ int hdb_cache_load(
 }
 #endif
 
-static void *
-bdb_cache_lru_purge(void *ctx, void *arg)
+/* caller must have lru_head_mutex locked. mutex
+ * will be unlocked on return.
+ */
+static void
+bdb_cache_lru_add(
+       struct bdb_info *bdb,
+       EntryInfo *ei )
 {
-       struct re_s *rtask = arg;
-       struct bdb_info *bdb = rtask->arg;
        DB_LOCK         lock, *lockp;
        EntryInfo *elru, *elprev;
        int count = 0;
 
+       LRU_ADD( &bdb->bi_cache, ei );
+       ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.lru_head_mutex );
+
+       /* See if we're above the cache size limit */
+       if ( bdb->bi_cache.c_cursize <= bdb->bi_cache.c_maxsize )
+               return;
+
        if ( bdb->bi_cache.c_locker ) {
                lockp = &lock;
        } else {
@@ -610,63 +622,6 @@ bdb_cache_lru_purge(void *ctx, void *arg)
        }
 
        ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.lru_tail_mutex );
-
-       /* If we're running as a task, drop the task */
-       if ( ctx ) {
-               ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
-               ldap_pvt_runqueue_stoptask( &slapd_rq, rtask );
-               /* Defer processing till we're needed again */
-               ldap_pvt_runqueue_resched( &slapd_rq, rtask, 1 );
-               ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
-       }
-
-       return NULL;
-}
-
-/* caller must have lru_head_mutex locked. mutex
- * will be unlocked on return.
- */
-static void
-bdb_cache_lru_add(
-       struct bdb_info *bdb,
-       EntryInfo *ei )
-{
-       LRU_ADD( &bdb->bi_cache, ei );
-       ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.lru_head_mutex );
-
-       /* See if we're above the cache size limit */
-       if ( bdb->bi_cache.c_cursize > bdb->bi_cache.c_maxsize ) {
-               if ( slapMode & SLAP_TOOL_MODE ) {
-                       struct re_s rtask;
-
-                       rtask.arg = bdb;
-                       bdb_cache_lru_purge( NULL, &rtask );
-               } else {
-                       int wake = 0;
-                       ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
-                       if ( bdb->bi_cache_task ) {
-                               if ( !ldap_pvt_runqueue_isrunning( &slapd_rq,
-                                       bdb->bi_cache_task )) {
-                                       /* We want it to start right now */
-                                       bdb->bi_cache_task->interval.tv_sec = 0;
-                                       ldap_pvt_runqueue_resched( &slapd_rq, bdb->bi_cache_task,
-                                               0 );
-                                       /* But don't try to reschedule it while it's running */
-                                       bdb->bi_cache_task->interval.tv_sec = 3600;
-                                       wake = 1;
-                               }
-                       } else {
-                               bdb->bi_cache_task = ldap_pvt_runqueue_insert( &slapd_rq, 3600,
-                                       bdb_cache_lru_purge, bdb, "bdb_cache_lru_purge",
-                                       bdb->bi_dbenv_home );
-                               wake = 1;
-                       }
-                       ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
-                       /* Don't bother waking if the purge task is already running */
-                       if ( wake )
-                               slap_wake_listener();
-               }
-       }
 }
 
 EntryInfo *