]> git.sur5r.net Git - openldap/commitdiff
ITS#4308 slapd-bdb/hdb cache sched fix
authorKurt Zeilenga <kurt@openldap.org>
Fri, 6 Jan 2006 20:17:13 +0000 (20:17 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Fri, 6 Jan 2006 20:17:13 +0000 (20:17 +0000)
CHANGES
servers/slapd/back-bdb/back-bdb.h
servers/slapd/back-bdb/cache.c

diff --git a/CHANGES b/CHANGES
index d1b4e5d1859d8eea51ca23d24afbac2f0866661f..cf055d745613b078cb3655026e4251803b8694ac 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,7 @@ OpenLDAP 2.3.16 Engineering
        Fixed slapd-monitor connection search crash (ITS#4300)
        Flapd slapd cn=config bad ACL syntax modfy crash (ITS#4306)
        Fixed slapd ACL/suffix configuration issue (ITS#4307)
+       Fixed slapd-bdb/hdb cache issue (ITS#4308)
        Build environment
                Replace sched_yield(2) on Linux with select(2) (ITS#3950)
        Documentation
index 3e52ed01c36f625b09c398a55e7e24b9bf963be7..4405d82f50e2a796eb33a100260c300238848235 100644 (file)
@@ -150,6 +150,9 @@ struct bdb_db_info {
        DB                      *bdi_db;
 };
 
+/* From ldap_rq.h */
+struct re_s;
+
 struct bdb_info {
        DB_ENV          *bi_dbenv;
 
@@ -175,9 +178,9 @@ struct bdb_info {
        int                     bi_txn_cp;
        u_int32_t       bi_txn_cp_min;
        u_int32_t       bi_txn_cp_kbyte;
-       void            *bi_txn_cp_task;
-       void            *bi_index_task;
-       void            *bi_cache_task;
+       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 aa82c6ca69d3b72d6889b8c9b360d4305fec8e42..d4ff2229773fec271d287a4c72e7ede41d9d35a6 100644 (file)
@@ -643,11 +643,16 @@ bdb_cache_lru_add(
                        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 ))
+                                       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;
+                               }
                        } else {
-                               bdb->bi_cache_task = ldap_pvt_runqueue_insert( &slapd_rq, 0,
+                               bdb->bi_cache_task = ldap_pvt_runqueue_insert( &slapd_rq, 3600,
                                        bdb_cache_lru_purge, bdb, "bdb_cache_lru_purge",
                                        bdb->bi_dbenv_home );
                        }