DB->close |
#include <db.h>int DB->close(DB *db, u_int32_t flags);
The DB->close function flushes any cached database information to disk, closes any open cursors, frees any allocated resources, and closes any underlying files. Because key/data pairs are cached in memory, failing to sync the file with the DB->close or DB->sync function may result in inconsistent or lost information.
The flags value must be set to 0 or the following value:
It is important to understand that flushing cached information to disk only minimizes the window of opportunity for corrupted data. Although unlikely, it is possible for database corruption to happen if a system or application crash occurs while writing data to the database. To ensure that database corruption never occurs, applications must either: use transactions and logging with automatic recovery; use logging and application-specific recovery; or edit a copy of the database, and once all applications using the database have successfully called DB->close, atomically replace the original database with the updated copy.
When multiple threads are using the Berkeley DB handle concurrently, only a single thread may call the DB->close function.
After DB->close has been called, regardless of its return, the DB handle may not be accessed again.
The DB->close function returns a non-zero error value on failure, 0 on success, and returns DB_INCOMPLETE if the underlying database still has dirty pages in the cache. (The only reason to return DB_INCOMPLETE is if another thread of control were writing pages in the underlying database file at the same time as the DB->close function was called. For this reason, a return of DB_INCOMPLETE can normally be ignored; or, in cases where it is a possible return value, the DB_NOSYNC option should probably have been specified.)
The DB->close function may fail and return a non-zero error for errors specified for other Berkeley DB and C library or system functions. If a catastrophic error has occurred, the DB->close function may fail and return DB_RUNRECOVERY, in which case all subsequent Berkeley DB calls will fail in the same way.