]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb2/close.c
Factor out ldif2* intialization to ldif2common.c
[openldap] / servers / slapd / back-bdb2 / close.c
index 647ba757ba4280fe2185b840c9dfb35a0fb61924..eafdf164f4b91fc7b01d46378b613fd6b5085975 100644 (file)
 static int
 bdb2i_back_db_close_internal( BackendDB *be )
 {
-       Debug( LDAP_DEBUG_TRACE, "bdb2 backend saving nextid\n", 0, 0, 0 );
-       if ( bdb2i_next_id_save( be ) < 0 ) {
-               Debug( LDAP_DEBUG_ANY, "bdb2 backend nextid save failed!\n", 0, 0, 0 );
+       DB_LOCK         lock;
+
+       /*  since close will probably write the NEXTID file,
+               wee need transaction control  */
+       if ( bdb2i_enter_backend_w( &lock ) != 0 ) {
+               return( -1 );
+       }
+
+       if ( slapMode != SLAP_TOOL_MODE ) {
+
+               Debug( LDAP_DEBUG_TRACE, "bdb2 backend saving nextid\n", 0, 0, 0 );
+               if ( bdb2i_next_id_save( be ) < 0 ) {
+                       Debug( LDAP_DEBUG_ANY, "bdb2 backend nextid save failed!\n",
+                                       0, 0, 0 );
+               }
        }
 
+       /*  before closing all files, leave the backend (thus commiting
+               all writes) and set a last checkpoint  */
+       (void) bdb2i_leave_backend_w( lock );
+       (void) bdb2i_set_txn_checkpoint( bdb2i_dbEnv.tx_info, 1 );
+
        /*  close all DB files  */
        Debug( LDAP_DEBUG_TRACE, "bdb2 backend closing DB files\n", 0, 0, 0 );
        bdb2i_txn_close_files( be );
@@ -29,23 +46,14 @@ bdb2i_back_db_close_internal( BackendDB *be )
 int
 bdb2_back_db_close( BackendDB *be )
 {
-       struct timeval  time1, time2;
-       char   *elapsed_time;
-       int    ret;
+       struct timeval  time1;
+       int             ret;
 
-       gettimeofday( &time1, NULL );
+       bdb2i_start_timing( be->bd_info, &time1 );
 
        ret = bdb2i_back_db_close_internal( be );
 
-       if ( bdb2i_do_timing ) {
-
-               gettimeofday( &time2, NULL);
-               elapsed_time = bdb2i_elapsed( time1, time2 );
-               Debug( LDAP_DEBUG_ANY, "CLOSE elapsed=%s\n",
-                               elapsed_time, 0, 0 );
-               free( elapsed_time );
-
-       }
+       bdb2i_stop_timing( be->bd_info, time1, "CLOSE", NULL, NULL );
 
        return( ret );
 }