]> git.sur5r.net Git - openldap/commitdiff
ITS#5442
authorQuanah Gibson-Mount <quanah@openldap.org>
Mon, 14 Apr 2008 23:27:48 +0000 (23:27 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 14 Apr 2008 23:27:48 +0000 (23:27 +0000)
CHANGES
servers/slapd/back-bdb/config.c
servers/slapd/overlays/accesslog.c

diff --git a/CHANGES b/CHANGES
index e3db3f7ed12d0d36dd9d5c585fc9be88651285ef..63e10cf8b1ec3aec2d8d9667d38d4c757c6d1902 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -17,6 +17,7 @@ OpenLDAP 2.4.9 Engineering
        Fixed slapd syncrepl crash on empty CSN (ITS#5432)
        Fixed slapd syncrepl refreshAndPersist (ITS#5454)
        Fixed slapd syncrepl modrdn processing (ITS#5397)
+       Fixed slapd/slapo-accesslog rq mutex usage (ITS#5442)
        Fixed slapd-ldap connection handler (ITS#5404)
        Fixed slapo-auditlog unnecessary syscall (ITS#5441)
        Fixed slapo-refint dnSubtreeMatch (ITS#5427)
index 184ebb64d595b380a4c1125861c9d0a0dcd40aa3..08ac6468a66c834990d172de1cef5a37f005b1b0 100644 (file)
@@ -483,9 +483,11 @@ bdb_cf_gen( ConfigArgs *c )
                        if ( bdb->bi_txn_cp_task ) {
                                struct re_s *re = bdb->bi_txn_cp_task;
                                bdb->bi_txn_cp_task = NULL;
+                               ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
                                if ( ldap_pvt_runqueue_isrunning( &slapd_rq, re ) )
                                        ldap_pvt_runqueue_stoptask( &slapd_rq, re );
                                ldap_pvt_runqueue_remove( &slapd_rq, re );
+                               ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
                        }
                        bdb->bi_txn_cp = 0;
                        break;
@@ -620,9 +622,11 @@ bdb_cf_gen( ConfigArgs *c )
                                                c->log );
                                        return 1;
                                }
+                               ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
                                bdb->bi_txn_cp_task = ldap_pvt_runqueue_insert( &slapd_rq,
                                        bdb->bi_txn_cp_min * 60, bdb_checkpoint, bdb,
                                        LDAP_XSTRING(bdb_checkpoint), c->be->be_suffix[0].bv_val );
+                               ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
                        }
                }
                } break;
@@ -747,9 +751,11 @@ bdb_cf_gen( ConfigArgs *c )
                                        c->log );
                                return 1;
                        }
+                       ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
                        bdb->bi_index_task = ldap_pvt_runqueue_insert( &slapd_rq, 36000,
                                bdb_online_index, c->be,
                                LDAP_XSTRING(bdb_online_index), c->be->be_suffix[0].bv_val );
+                       ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
                }
                break;
 
index d63b427229a0e491b2a4ce2ffea98eb2ea2e0c98..c77732a729bddb8cbeee112cb7e0b17eee7b6cb6 100644 (file)
@@ -769,9 +769,11 @@ log_cf_gen(ConfigArgs *c)
                        if ( li->li_task ) {
                                struct re_s *re = li->li_task;
                                li->li_task = NULL;
+                               ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
                                if ( ldap_pvt_runqueue_isrunning( &slapd_rq, re ))
                                        ldap_pvt_runqueue_stoptask( &slapd_rq, re );
                                ldap_pvt_runqueue_remove( &slapd_rq, re );
+                               ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
                        }
                        li->li_age = 0;
                        li->li_cycle = 0;
@@ -843,12 +845,15 @@ log_cf_gen(ConfigArgs *c)
                                        struct re_s *re = li->li_task;
                                        if ( re )
                                                re->interval.tv_sec = li->li_cycle;
-                                       else
+                                       else {
+                                               ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
                                                li->li_task = ldap_pvt_runqueue_insert( &slapd_rq,
                                                        li->li_cycle, accesslog_purge, li,
                                                        "accesslog_purge", li->li_db ?
                                                                li->li_db->be_suffix[0].bv_val :
                                                                c->be->be_suffix[0].bv_val );
+                                               ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
+                                       }
                                }
                        }
                        break;
@@ -2022,8 +2027,10 @@ accesslog_db_open(
                ber_dupbv( &li->li_db->be_rootndn, li->li_db->be_nsuffix );
        }
 
+       ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
        ldap_pvt_runqueue_insert( &slapd_rq, 3600, accesslog_db_root, on,
                "accesslog_db_root", li->li_db->be_suffix[0].bv_val );
+       ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
 
        return 0;
 }