diff --git a/CHANGES b/CHANGES index c7651e1edffd1842af7a22eaef5a3d8d9a4e5acf..bec65ffda20a355ca3d19c81dd244245b831a65c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,7 @@ OpenLDAP 2.4 Change Log OpenLDAP 2.4.13 Engineering + Fixed slapd-bdb/hdb invalid db crash (ITS#5698) OpenLDAP 2.4.12 Release (2008/10/12) Fixed libldap ldap_utf8_strchar arguments (ITS#5720) diff --git a/servers/slapd/back-bdb/init.c b/servers/slapd/back-bdb/init.c index 14bd1b1bfcf14e4c579a02bec4e846a0a59a3b13..393b6a52f42038b677814c6533ec9d866498eb22 100644 --- a/servers/slapd/back-bdb/init.c +++ b/servers/slapd/back-bdb/init.c @@ -640,6 +640,17 @@ bdb_db_destroy( BackendDB *be, ConfigReply *cr ) { struct bdb_info *bdb = (struct bdb_info *) be->be_private; + /* stop and remove checkpoint task */ + 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 ); + } + /* monitor handling */ (void)bdb_monitor_db_destroy( be );