]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/dds.c
ITS#7906,#7923 Don't free configinfo in _db_close
[openldap] / servers / slapd / overlays / dds.c
index f8b2dab5140d297b194522eef4bb88ad68fdc426..1984998c587dca688c9abadbf7e339782dc541d9 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2005-2012 The OpenLDAP Foundation.
+ * Copyright 2005-2014 The OpenLDAP Foundation.
  * Portions Copyright 2005-2006 SysNet s.n.c.
  * All rights reserved.
  *
@@ -1733,8 +1733,15 @@ dds_db_open(
        di->di_suffix = be->be_suffix;
        di->di_nsuffix = be->be_nsuffix;
 
-       /* ... so that count, if required, is accurate */
-       if ( di->di_max_dynamicObjects > 0 ) {
+       /* count the dynamic objects first */
+       rc = dds_count( thrctx, be );
+       if ( rc != LDAP_SUCCESS ) {
+               rc = 1;
+               goto done;
+       }
+
+       /* ... if there are dynamic objects, delete those expired */
+       if ( di->di_num_dynamicObjects > 0 ) {
                /* force deletion of expired entries... */
                be->bd_info = (BackendInfo *)on->on_info;
                rc = dds_expire( thrctx, di );
@@ -1743,12 +1750,6 @@ dds_db_open(
                        rc = 1;
                        goto done;
                }
-
-               rc = dds_count( thrctx, be );
-               if ( rc != LDAP_SUCCESS ) {
-                       rc = 1;
-                       goto done;
-               }
        }
 
        /* start expire task */
@@ -1783,6 +1784,7 @@ dds_db_close(
                }
                ldap_pvt_runqueue_remove( &slapd_rq, di->di_expire_task );
                ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
+               di->di_expire_task = NULL;
        }
 
        (void)entry_info_unregister( dds_entry_info, (void *)di );