### Berkeley DB 3.0.55 Change Log

### Database On-Disk Format Changes:

1. The on-disk Btree/Recno format has changed from version 6 to version 7, and the on-disk Hash format has changed from version 5 to version 6. For information on upgrading database formats, see section 3.3, "Upgrading databases" in the Berkeley DB Reference Guide

### Major New Features:

1. A new Access Method has been added to Berkeley DB: the Queue Access Method. The Queue Access Method is similar to the Recno Access Method, but is implemented to provide significantly higher-concurrency queue-oriented append and consume operations.
2. Berkeley DB now supports multiple databases (subdatabases) per physical file.
3. Berkeley DB now supports standard POSIX pthread, UI thread and Solaris LWP mutexes.
4. Database creation and removal are now optionally transaction protected.
5. Berkeley DB now includes a complete Tcl API.
6. Berkeley DB now optionally creates dynamic shared libraries.

### Interface Changes:

1. The Berkeley DB interfaces have been reworked in the 3.0.55 release for two reasons. The goals were as follows: to make the Berkeley DB structures opaque so future releases of Berkeley DB can be binary compatible with each other, provide enhanced error checking and reporting during Berkeley DB environment and database configuration and creation, provide configurability throughout the lifetime of the environment and database, and to make the Berkeley DB interfaces consistent across the C++, C and Java APIs.

   While the C API changes are extensive, they are also simple to understand. No functionality was removed. The changes required comparatively few modifications to the C++ and Java APIs, mostly limited to moving methods among classes and the addition of a new flag value to a few interfaces. For specific instructions on upgrading Berkeley DB 2.X applications to this release, see the "Upgrading Berkeley DB 2.X.X applications to Berkeley DB 3.0" chapter in the Berkeley DB Reference Guide.

   The following individual changes are all part of this larger change.

   #### Function changes:

   1. The db_appinit and db_appexit functions have been replaced by the db_env_create function and the DBENV->open and DBENV->close methods. The db_open function has been removed, replaced by the db_create function and the DB->open method. Berkeley DB environments are now created using the db_env_create function followed by methods on the handle it returns. Berkeley DB databases are now created using the db_create function followed by methods on the handle it returns.
   2. The lock_open, lock_close and lock_unlink functions have been replaced by the db_env_create function and the DBENV->open, DBENV->close and DBENV->remove methods. The remaining lock subsystem functions now take a DBENV handle as their first argument instead of a DB_LOCKTAB handle.
   3. The log_open, log_close and log_unlink functions have been replaced by the db_env_create function and the DBENV->open, DBENV->close and DBENV->remove methods. The remaining log subsystem functions now take a DBENV handle as their first argument instead of a DB_LOG handle.
   4. The memp_open, memp_close and memp_unlink functions have been replaced by the db_env_create function and the DBENV->open, DBENV->close and DBENV->remove methods. The remaining shared memory buffer pool functions now take a DBENV handle as their first argument instead of a DB_MPOOL handle.
   5. The txn_open, txn_close and txn_unlink functions have been replaced by the db_env_create function and the DBENV->open, DBENV->close and DBENV->remove methods. The remaining transaction subsystem functions now take a DBENV handle as their first argument instead of a DB_TXNMGR handle.
   6. The db_jump_set and db_value_set functions have been replaced by methods on the DBENV handle.
   7. The db_xa_open routine has been replaced by a new flag, DB_XA_CREATE, which is passed to the db_create function.

   #### DBENV structure changes:

   1. The db_errcall, db_errfile, db_errpfx and db_paniccall fields of the DBENV structure have been deprecated and their functionality replaced by the DBENV->set_errcall, DBENV->set_errfile, DBENV->set_errpfx and DBENV->set_paniccall methods.
   2. The db_verbose field of the DBENV structure has been replaced by the DBENV->set_verbose method.
   3. The lk_conflicts, lk_detect, lk_max and lk_modes fields of the DBENV structure have been replaced by the DBENV->set_lk_conflicts, DBENV->set_lk_detect and DBENV->set_lk_max methods.
   4. The lg_max field of the DBENV structure has been replaced by the DBENV->set_lg_max method.
   5. The mp_mmapsize and mp_size fields of the DBENV structure have been replaced by the DBENV->set_cachesize and DBENV->set_mp_mmapsize methods.
   6. The tx_info, tx_max and tx_recover fields of the DBENV structure have been replaced by the DBENV->set_tx_max and DBENV->set_tx_recover methods.
   7. The (unused) DBENV->db_lorder field has been deleted.

   #### DB structure changes:

   1. The byteswapped field of the DB structure has been replaced by the DB->get_byteswapped method.
   2. The db_errcall, db_errfile, db_errpfx and db_paniccall fields of the DB structure have been deprecated and their functionality replaced by the DB->set_errcall, DB->set_errfile, DB->set_errpfx and DB->set_paniccall methods.
   3. The type field of the DB structure has been replaced by the DB->get_type method.

   #### DBINFO structure changes:

   1. The bt_compare field of the DB structure has been replaced by the DB->set_bt_compare method.
   2. The bt_minkey field of the DB structure has been replaced by the DB->set_bt_minkey method.
   3. The bt_prefix field of the DB structure has been replaced by the DB->set_bt_prefix method.
   4. The db_cachesize field of the DB structure has been replaced by the DB->set_cachesize method.
   5. The db_lorder field of the DB structure has been replaced by the DB->set_lorder method.
   6. The db_malloc field of the DB structure has been replaced by the DB->set_malloc method.
   7. The db_pagesize field of the DB structure has been replaced by the DB->set_pagesize method.
   8. The dup_compare field of the DB structure has been replaced by the DB->set_dupcompare method.
   9. The flags field of the DB structure has been replaced by the DB->set_flags method.
   10. The h_ffactor field of the DB structure has been replaced by the DB->set_h_ffactor method.
   11. The h_hash field of the DB structure has been replaced by the DB->set_h_hash method.
   12. The h_nelem field of the DB structure has been replaced by the DB->set_h_nelem method.
   13. The re_delim field of the DB structure has been replaced by the DB->set_re_delim method.
   14. The re_len field of the DB structure has been replaced by the DB->set_re_len method.
   15. The re_pad field of the DB structure has been replaced by the DB->set_re_pad method.
   16. The re_source field of the DB structure has been replaced by the DB->set_re_source method.

2. The use of the POSIX EAGAIN error return to indicate deadlock has been replaced with the Berkeley DB specific error DB_LOCK_DEADLOCK. Note: this change could potentially cause subtle errors. Programs must be updated or the Berkeley DB distribution altered for programs to run correctly. See the "Upgrading Berkeley DB 2.X.X applications to Berkeley DB 3.0" chapter in the Berkeley DB Reference Guide for more information.
3. The DB_RMW flag to the DB->cursor method has been renamed to be DB_WRITECURSOR (note, this change is applicable only to the Berkeley DB Concurrent Data Store product).
4. The DB_LOCK structure is no longer a simple integer value. For this reason, the DB_LOCK argument to the lock_put interface has been changed to be a reference to a DB_LOCK structure instead of the DB_LOCK structure itself.
5. The db_home argument to the environment creation function (historically db_appinit, now DBENV->open) now overrides the DB_HOME environment variable; this is necessary so that the -h option to the various Berkeley DB utilities can override the user's environment.
6. A mode argument was added to the environment creation function (historically db_appinit, now DBENV->open) to allow applications to specify the mode of files created in the Berkeley DB environment.
7. The DB_LOCKDOWN flag was added to enable applications to attempt to lock shared memory regions into physical memory.

### General Environment Changes:

1. A new flag has been added to the DBENV->open method, DB_SYSTEM_MEM. This flag causes Berkeley DB to attempt to allocate memory for its shared regions from system shared memory. This flag supports functionality similar to that previously provided by the DB_REGION_ANON and DB_REGION_NAME flags to the db_value_set interface.
2. A new flag has been added to the DBENV->open method, DB_PRIVATE. This flag causes Berkeley DB to attempt to allocate memory for its shared regions from the heap and to assume that only inter-thread mutexes are required, and not inter-process ones as well. This flag is a superset of the functionality previously provided by the DB_MPOOL_PRIVATE flag to the memp_open interface.
3. There is a new DBENV method, DBENV->remove, that removes entire Berkeley DB environments.
4. There are two new methods, DBENV->set_feedback and DB->set_feedback, that allow applications to specify a callback function that is to be called with periodic progress updates on various Berkeley DB operations.
5. There is a new DBENV method, DBENV->set_recovery_init, that allows applications to install application-specific recovery functions before Berkeley DB performs recovery.
6. There is a new DBENV method, DBENV->set_verbose, that allows applications to request verbose information from the Berkeley DB library.
7. The Berkeley DB 3.0.55 release includes enhanced functionality for reporting Berkeley DB returned errors. There are two new DBENV methods, DBENV->err and DBENV->errx, and two new DB methods, DB->err and DB->errx, which allow applications to format and report Berkeley DB error returns using any of the historic output channels. There is an additional function, db_strerror, which is a superset of the ANSI C standard strerror function, providing error strings for both the Berkeley DB errors and underlying system errors.
8. There is a new DBENV method, DBENV->set_lg_bsize, that allows applications to specify the size of the in-memory log buffer.
9. Reduce the number of file descriptors used to support fcntl locking from one-per-region to a single one.
10. Rename the filesystem representations of the Berkeley DB library's shared regions.
11. Rename temporary files created by Berkeley DB from just a printable representation of the process ID to "BDB" followed by a printable representation of the process ID.
12. Return an error if environment interfaces called without initial environment configuration.
13. Fix a bug where Concurrent Data Store accepted incorrect flags, for example, DB_RECOVERY.
14. Fix a bug where specifying any one-character directory in the db_config argument or other related configuration interface would fail.
15. Fix a bug where recovery could fail if only a single checkpoint had ever been written.
16. Fix a bug where threads could race when regions were grown. Because there exist systems where mutexes cannot be unmapped and then remapped back into application memory, the functionality to grow regions has been removed from the Berkeley DB 3.0.55 release. This means that selecting a correct initial region size (for example, based on the number of active transactions) is more important than before. To facilitate this, region high-water marks have been added to the region statistics where appropriate.

### General Access Method Changes:

1. There is a new DB method, DB->remove, that deletes a database in a transaction-protected operation.
2. There is a new DB method, DB->upgrade, that upgrades the on-disk format of an underlying database.
3. There is a new DB method, DB->set_realloc, that allows applications to specify a local memory reallocation function similarly to the previously available DB->set_malloc functionality.
4. The DB->open method supports a new flag, DB_EXCL, which behaves similarly to the POSIX O_EXCL system open call flag.
5. The Berkeley DB 3.0.55 release includes enhanced functionality for reporting Berkeley DB returned errors. There are two new DBENV methods, DBENV->err and DBENV->errx, and two new DB methods, DB->err and DB->errx, which allow applications to format and report Berkeley DB error returns using any of the historic output channels. There is an additional function, db_strerror, which is a superset of the ANSI C standard strerror function, providing error strings for both the Berkeley DB errors and underlying system errors.
6. The last two arguments to the DB->join method were reversed for consistency with the rest of the Berkeley DB interfaces taking cursor references and flags arguments.
7. A cursor duplication method has been added to the DBcursor handle. This method can be used to duplicate a cursor's transaction and locker ID, and, optionally, to duplicate its position in the database. This change adds useful functionality, and more importantly makes it possible to write applications that both use locking without transactions and have multiple cursors in the same thread of control.
8. There is a new DBT structure flag, DB_DBT_REALLOC, that allows threaded applications to re-use a single piece of memory for multiple Berkeley DB retrievals, similarly to the DB_DBT_MALLOC flag.
9. Enhance in-memory databases so that operations on them may be transaction protected. Fix a bug where specifying logging and transactions on an in-memory database could cause a core dump.
10. Change Berkeley DB recovery to not undo operations performed by logged, but not transaction protected operations.
11. Change Berkeley DB to no longer generate new locker IDs for every cursor in non-threaded environments to greatly reduce the possibility of self-deadlock.
12. Change the "dbopen" function in the Berkeley DB 1.85 compatibility API to "__dbopen185" so that we don't collide with the C library where the C library is version 1.85.
13. Fix multiple bugs where joins did not correctly work in the presence of unsorted duplicates or duplicate duplicates.
14. Fix an erroneous error message by removing diagnostic code which assumed that closing a cursor closed all locks held by the cursor locker ID.
15. Fix a bug in the default overflow comparison routine such that if the overflow comparison test failed because we ran out of key bytes, but were also on the last page of the overflow item, we would return equality even though there were remaining bytes in the overflow item.
16. Fix a bug where read-only databases were registered with the logging subsystem, causing Berkeley DB recovery to open and close them.
17. Fix a bug where it was (remotely) possible for a file registered with the logging subsystem to be incorrectly evaluated as not logging changes.
18. Fix a bug where the DBcursor->c_close method didn't correctly release locks in the Berkeley DB Concurrent Data Store product.
19. Fix a bug where the read-modify-write flag was set in the DB->put method when the database was not configured for locking.
20. Fix two bugs where the DB->join and DB->put methods assumed that the only possible error was DB_NOTFOUND, thus failing to return deadlock errors to the application.
21. Fix a bug where illegal flags to the DB->cursor method weren't caught.
22. Fix a bug where illegal flags to the DBcursor->c_get method weren't caught.
23. Fix a bug where the DB_NEXT_DUP flag could be specified with an uninitialized cursor.
24. Fix a bug where the DB->sync and DB->close methods did not return the DB_INCOMPLETE error if it occurred.
25. Fix a bug where off-page duplicate splits could cause cursors to be mis-positioned.
26. Fix a bug where partial puts of fixed-length records could cause data corruption.
27. Fix a set of potential bugs where the OSF/1 and gcc compilers will use instructions requiring alignment on unaligned data.
28. Fix multiple bugs with large numbers of duplicate records including large numbers of duplicate duplicate records.

### Btree Access Method Changes:

1. The on-disk Btree/Recno format has changed from version 6 to version 7, required due to a change in the database metadata page.
2. The Btree cursor routines have been rewritten to use the new cursor duplicate functionality. This fixed a couple of bugs where specific sequences of database operations could cause the cursor to become mis-positioned in the database and made it less likely that similar bugs can be introduced in the future.
3. Applications may now optionally turn off reverse-splitting in Btree databases.
4. Btree split operations have been reworked to acquire the metadata page lock last, and only if the split is going to succeed. This significantly increases the possible level of concurrency in small databases.
5. Fix a bug where database corruption could occur if enough threads writing to a small database all schedule page splits.
6. Fix a bug where the DB_SET_RANGE option could return an already deleted on-page duplicate record to the application.
7. Fix a bug where an application could core dump if deadlock occurred during cursor close.
8. Fix a bug where applications with high-concurrency requirements could encounter races.
9. Fix a bug where read serializability was incorrect.
10. Fix a bug where records of the wrong endian-ness were not correctly imported.
11. Fix a bug where an application's cursor could be mis-positioned if a split failed unexpectedly.
12. Fix a bug where the DB_SET_RECNO, DB_SET and DB_GET_BOTH flags could potentially return inexact matches under some circumstances.
13. Fix a bug where searches could potentially leave pages in the database locked.
14. Fix a bug where deleted records could potentially be left in the database after all cursors were closed.
15. Fix a bug where deleting the last duplicate entry on a page could cause an application core dump.
16. Fix a bug where a page lock could be incorrectly discarded when moving through on-page duplicate items.
17. Fix a bug where retrieval of a specific duplicate data item could cause a core dump.
18. Fix a bug where DB_CURRENT could erroneously release the cursor's page lock.
19. Fix a bug where the DB->del interface to a Btree database could leave a cursor mis-positioned under some circumstances.
20. Fix a memory leak when using the DB->del interface to delete records.
21. Fix a bug where specifying the DB_DBT_PARTIAL flag and a dbt.off value when creating a new record included garbage in the record.
22. Fix a bug where Btree statistics did not correctly account for overflow and off-page duplicate pages.
23. Fix a bug where Btree statistics could fail and leave database pages locked.
24. Fix a bug where page LSNs could be lost during recovery of a page split.
25. Fix a bug where empty pages in big-endian databases were not always correctly converted.
26. Fix a bug where previously deleted records could be accessed on the page, leading to potentially incorrect behavior.
27. Fix a bug where on-page duplicates could be corrupted when reading non-native-endian databases.

### Hash Access Method Changes:

1. The on-disk Hash format has changed from version 5 to version 6, required due to a change in the database metadata page.
2. In order to allow hash databases as subdatabases, hash will allocate groups of contiguous pages. This may cause some hash databases to appear much larger than they actually are (that is, they will be sparse files).
3. Statistics, returned by the DB->stat method, have been added to the Hash Access Method.
4. Fix a bug where initial access of a duplicate data item could cause future access of other items to fail.
5. Fix a bug where puts or deletes could cause cursors on the same page to reference incorrect entries.
6. Fix a bug where partial gets from on-page duplicates could be wrong.
7. Fix a set of bugs where error paths could lead to application failure.
8. Fix a set of bugs where cursors could be mis-positioned after operations on off-page duplicates or off-page duplicates could be stored in incorrect sorted order.
9. Fix a bug where overwriting duplicate items could fail.
10. Fix a bug where an error return value could be overwritten when releasing the metadata page.

### Queue Access Method Changes:

None.

### Recno Access Method Changes:

1. Support read-only backing source files for Recno databases.
2. Fix a bug where accessing the backing source filename could find incorrect information or cause a core dump.
3. Fix a bug where the length of fixed-length Recno records were not correctly byte-swapped during database load.
4. Fix a set of related bugs where the DB_DBT_PARTIAL flag was incorrectly handled when manipulating fixed-length records.
5. Fix a bug where the key created by the DB_AFTER and DB_BEFORE operations was not correctly returned.
6. Fix a set of related bugs where certain sequences of operations could leave application cursors mis-positioned.
7. Fix a bug where deleting the last record in a database could leave an application cursor mis-positioned.
8. Fix a bug where DB_APPEND returned an error instead of appending to the database.
9. Fix a bug where specifying the DB_CURRENT, DB_FIRST or DB_NEXT flags could fail because insufficient records had been read from the backing file.
10. Fix a bug where page splits could result in an incorrect previous page pointer.
11. Fix a bug where the DB_GET_BOTH flag was permitted for Recno, which does not support it.

### C++ API Changes:

1. Remove the DbLockTab, DbLog, DbMpool and DbTxnMgr classes, moving their methods to the DbEnv class.
2. Replace the set_error_model method with the DB_CXX_NO_EXCEPTIONS flag to the DbEnv class constructor.
3. Added constructor with a single flag argument for DbEnv and Db. Added (nonstatic) open methods to DbEnv, Db.
4. Methods (such as DbLock::put) that used to have a DbMpool, DbLockTab, DbLog, or DbTxnMgr pointer argument, now take a DbEnv pointer argument.
5. Added DbEnv::set_feedback(), DbEnv::set_recovery_init().
6. Added DbEnv::strerror(), DbEnv::err(), DbEnv::errx()
7. Added BtrecExample, a Btree record example.
8. Fix a bug where the error model was not set before the initial environment was opened.

### Java API Changes:

1. Remove the DbLockTab, DbLog, DbMpool and DbTxnMgr classes, moving their methods to the DbEnv class.
2. Added constructor with a single flag argument for DbEnv and Db. Added (nonstatic) open methods to DbEnv, Db.
3. Methods (such as DbLock.put) that used to have a DbMpool, DbLockTab, DbLog or DbTxnMgr argument, now take a DbEnv argument.
4. Added DbEnvFeedback, DbRecoverInit interfaces that are used as 'callbacks' with DbEnv.set_feedback(), DbEnv.set_recovery_init().
5. Added DbEnv.strerror(), DbEnv.err(), DbEnv.errx()
6. Added DbDeadlockException, DbMemoryException classes to allow catching of more specific errors.
7. Added DbHashStat class.
8. Added BtrecExample, a Btree record example.
9. Updated AccessExample to illustrate technique of subclassing from Dbt to handle arbitrary data types, in this case to create a StringDbt class.

### Tcl API Changes:

None.

### XA Resource Manager Changes:

1. Fix a bug where it was possible to specify both JOIN and RESUME to the XA start interface.
2. Fix a bug where the current txn ID was not invalidated after commit/prepare/abort, as the resource manager process does not call xa_end.
3. Fix a bug where the TMRESUME and TMONEPHASE flags were incorrectly checked in the xa_start interface.

### Locking Subsystem Changes:

1. The lock_detect interface has been modified to optionally return a count of the number of deadlocks broken.
2. The lock_detect routine has been modified to break as many deadlocks as possible during each run instead of returning after breaking a single deadlock.
3. The lock subsystem lock_put and lock_vec calls will no longer return DB_LOCK_NOTHELD or EACCES errors under any circumstances to indicate that a lock was held by another locker.
4. The lock_stat function now returns the following additional information:
   1. st_lock_id: The last allocated lock ID.
   2. st_maxnlockers: The maximum lockers at any one time.
   The lock_stat function no longer returns the following information:
   1. st_magic: The magic number that identifies a file as a lock file.
   2. st_numobjs: The number of unique objects locked.
   3. st_refcnt: The number of references to the region.
   4. st_version: The version of the lock file type.
5. Lock IDs are now allowed to wrap, rather than being limited to two billion.
6. Fix a bug in lock detection where it was possible to lose track of lockers.
7. Fix a bug where all locks held on an object were not necessarily released when DB_LOCK_PUT_OBJ was requested.
8. Fix a bug where the lock subsystem did not detect a lock conflict if there was no transaction.
9. Fix a bug where lock_detect could treat the DB_LOCK_OLDEST and DB_LOCK_YOUNGEST flags as semantically equivalent.
10. Fix a bug where locks waiting on an aborted lock were not correctly promoted at the time of the abort.
11. Fix a bug where committing a child that held no locks was treated as an error.
12. Fix a bug where deadlock detection was done incorrectly in the case of transactions with nested children.
13. Fix a bug where parent transactions which had never obtained locks were incorrectly handled when child transactions committed.
14. Fix a bug where the library could dump core if multiple deadlock detectors were running simultaneously.

### Logging Subsystem Changes:

1. The log_register function no longer takes a DBTYPE argument.
2. Open log files with the Windows FILE_FLAG_WRITE_THROUGH flag on Windows systems that support it.
3. Make verbose message "Finding last valid log LSN" optional based on the DBENV->set_verbose method.
4. Modify log to not attempt to allocate unreasonably large buffers when reading garbage from the log.
5. Modify log_register to re-use file identifiers to avoid running out in applications that repeatedly open and close files.
6. The log_stat function now returns the following additional information:
   1. st_lg_bsize: The in-memory log record cache size.
   2. st_wcount: The number of times the log has been written to disk.
   3. st_wcount_fill: The number of times the log has been written to disk because the in-memory log record cache filled up.
   The log_stat function no longer returns the following information:
   1. st_refcnt: The number of references to the region.
7. Fix a bug where the last-known-LSN-on-disk wasn't being set correctly, causing the next log_flush call to decide not to flush the current contents of the buffer to disk, and losing the recovery checkpoint record.
8. Fix a bug where recovery was not returning the next-to-last checkpoint, rather it always returned the last checkpoint.
9. Fix a number of related bugs in file registry, that could lead to crashes during recovery in applications that repeatedly created, opened and closed files.

### Buffer Pool Subsystem Changes:

1. The Berkeley DB 3.0.55 release still limits the buffer pool to a 4GB cache. However, the method for setting the Berkeley DB buffer cache size, DBENV->set_cachesize, has been changed to allow applications to specify cache sizes larger than 4GB, in preparation for relaxing that limitation. In addition, applications may specify that multiple pieces of shared memory are to be used to create the cache, for architectures that do not support 4GB chunks of contiguous shared memory.
2. Add a new semantic for memp_sync, if the LSN argument is NULL, flush the entire buffer cache.
3. The DB_MPOOL_PRIVATE flag to the db_appinit and memp_open functions has been removed, replaced by the DB_PRIVATE flag to the DBENV->open method.
4. The memp_stat function no longer returns the following information:
   1. st_refcnt: The number of references to the region.
5. Allow for OS-specific functions that preallocate pages in files since non-POSIX systems (read as "Windows") will give you garbage in the middle of a file (let's talk about security).
6. Fix a bug where transaction checkpoint could pin down the entire buffer cache, starving requests for new buffers.
7. Fix a bug where systems with large POSIX pthread structures could allocate too little memory for the default pool.
8. Fix a bug where highly concurrent systems could end up with incorrect buffers-to-flush counts during cache syncs.
9. Fix a bug where the wrong page number could be used when allocating new pages.

### Transaction Subsystem Changes:

1. The txn_begin function now takes a flag parameter. This allows specification of synchronous or asynchronous log flushing behavior on a per-transaction basis during begin. Applications may also specify a flag that causes Berkeley DB to return an error immediately if any lock is unavailable, rather than waiting for the lock.
2. The txn_commit function now takes a flag parameter. This allows specification of synchronous or asynchronous log flushing behavior on a per-transaction basis during commit.
3. The txn_stat function now returns the following additional information:
   1. st_maxnactive: The maximum number of active transactions at any one time.
   2. parentid: The st_txnarray structure includes a new field, parentid, which is the transaction ID of the parent transaction (or 0, if no parent).
   The txn_stat function no longer returns the following information:
   1. st_refcnt: The number of references to the region.
4. Do not complain about "missing files" during recovery if no operations were performed on the file.
5. Free the recovery dispatch table after recovery has completed.
6. Fix a bug where it was possible to overwrite the checkpoint LSN during checkpoint.
7. Fix a bug where an uncommitted child TXN was not committed when its parent TXN committed.
8. Fix a bug where nested transactions could be undone in an incorrect order in the presence of parents making modifications to pages already modified by the child.

### Utility Changes:

1. Change the output of the db_dump utility to support subdatabases. The db_load utility supports both the old and new input formats of the db_dump utility.
2. Add the -k option to the db_dump utility to support dumping Queue and Recno databases without altering their key values.
3. Add the -l and -s options to the db_dump utility to support subdatabases.
4. Modify the -d option to the db_dump utility to support different output formats as part of recovery testing.
5. Modify the -N option for utilities supporting it to not only not acquire Berkeley DB mutexes, but to also ignore any other potentially fatal errors or corruption.
6. Add the -e option to db_stat, to display per-environment statistics.
7. Add the -s options to the db_stat utility to support subdatabases.
8. The db_stat utility will now print out page or record numbers when displaying lock information for locks obtained by the access methods.
9. Fix a bug where db_stat could drop core if called incorrectly.
10. Fix a bug where db_recover would force regions to be created at the default size instead of the size requested by the application.
11. Fix bugs where the db_checkpoint and db_deadlock utilities incorrectly wrote their process IDs to their log files.
12. Fix bugs where some of the Berkeley DB provided utilities had inconsistent POSIX signal handling. Block SIGPIPE on applicable systems in case the utility output is being piped to another process.

### Configuration, Documentation, Portability and Build Changes:

1. The documentation has been extensively rewritten and enhanced, in particular, the Berkeley DB Reference Guide has been completed.
2. The University of California, Berkeley copyright clause relating to acknowledgement within advertising materials has been deleted from the Berkeley DB copyrights.
3. Berkeley DB now optionally builds dynamic shared libraries, see the --enable-dynamic configuration option for more information.
4. Add support on Windows for sharing files in system-specific way supporting the new DB_SYSTEM_MEM.
5. The Windows/3.1 support has been removed from the distribution.
6. Java support has been integrated in the project file that is part of the Visual C++ workspace.
7. Java support has been integrated into the standard build Makefile.
8. Changed DLL names to use conventions like libdb30d.dll. Debug vs. release libraries and different release numbered libraries can now be distinguished.
9. The Solaris/Sparc V9 platform has 8-byte dev_t, ino_t and time_t values, which required the database file unique ID to be rewritten.
10. The configuration include file for Berkeley DB has been renamed from "config.h" to "db_config.h" to minimize the potential for name collision with other packages.
11. Some C++ operator=() methods that did not have a return type now have return type void.
12. Allow for different JNI's implementation of AttachCurrentThread().
13. Multiple changes to make it easier for applications to use the Berkeley DB recovery infrastructure to accomplish recovery of their own objects.
14. Separate out the Berkeley DB distribution script that creates the log marshalling/unmarshalling layer source code so that it can be called separately by application-specific logging code.
15. Add a file to the build_unix subdirectory, some Linux releases have archive exploders that will not extract directories containing only symbolic links.
16. The external variable errno support has been extracted out of the main library source code, and is now encapsulated in a single source file.
17. Rename the getlong() subroutine to __db_getlong() to eliminate a potential namespace collision.
18. Replace all "int" file descriptors with system-independent file handle structures.
19. The db_jump_set interface has be replaced with methods on the DBENV handle.
20. The db_value_set interface has be replaced with methods on the DBENV handle.
21. The Berkeley DB test suite has been rewritten to match the new Tcl API, and a large number of new tests have been added.
22. All SCCS Ids yanked to 11.X and copyrights updated to include 1999.
23. Add Gcc/Alpha assembly mutex support.
24. Add guard-byte support for allocated memory when DIAGNOSTIC #defined.
25. Fix a bug in ndbm compatibility API code to correct for the O_WRONLY flag.
26. Fix a bug in the OS layer where the return of the lseek() call could be cast to an int.