From 939985322ad22099e200899a61e7f8cb9fd92e62 Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Fri, 6 Jan 2006 20:17:13 +0000 Subject: [PATCH] ITS#4308 slapd-bdb/hdb cache sched fix --- CHANGES | 1 + servers/slapd/back-bdb/back-bdb.h | 9 ++++++--- servers/slapd/back-bdb/cache.c | 9 +++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index d1b4e5d185..cf055d7456 100644 --- 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 diff --git a/servers/slapd/back-bdb/back-bdb.h b/servers/slapd/back-bdb/back-bdb.h index 3e52ed01c3..4405d82f50 100644 --- a/servers/slapd/back-bdb/back-bdb.h +++ b/servers/slapd/back-bdb/back-bdb.h @@ -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; diff --git a/servers/slapd/back-bdb/cache.c b/servers/slapd/back-bdb/cache.c index aa82c6ca69..d4ff222977 100644 --- a/servers/slapd/back-bdb/cache.c +++ b/servers/slapd/back-bdb/cache.c @@ -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 ); } -- 2.39.5