### Berkeley DB 2.6.4 Change Log

### Interface Additions in Berkeley DB 2.6.4:

1. Berkeley DB now supports a new mode of operation: Concurrent Access Methods. This configuration supports multiple-reader, single-writer access without requiring deadlock detection and transaction protection. The new interface is specified by using the DB_INIT_CDB flag to the db_appinit() function.

   In addition, the DB->cursor interface has been modified to take a fourth argument, a flags argument. This change will require that all applications using the DB->cursor interface be modified and recompiled. (The necessary modification is trivial, simply add a final argument of 0 to the DB->cursor call.)

   This change is NOT transparent to applications.

2. In previous Berkeley DB releases, cursors in Recno databases with mutable record numbers had to be re-positioned each time they were used to delete a record. This is no longer the case, and all of the records in the database logically at and above the cursor may now be deleted by repeatedly calling the delete function after positioning the cursor once. This change causes Berkeley DB practice to conform to the documentation found in previous releases.

   This change is NOT transparent to applications.

3. Berkeley DB no longer permits applications to specify database page sizes that are not powers-of-two. This change fixes a bug which could cause application failure, as page alignments were not necessarily correct when files with page sizes other than powers-of-two were mapped into process memory.

   This change is NOT transparent to applications.

### B+tree Access Method Bug Fixes:

1. Fix a bug which could cause application failure or corrupted data when database operations would split a Btree page and then subsequently fail or attempt to physically delete records after being restarted.

2. Fix a bug which could cause application failure when deleting records failed due to a deadlock.

3. Fix a bug which could cause a NULL pointer dereference when the relinking of duplicate data item pages failed due to deadlock.

4. Fix a memory leak where an internal cursor could be left open when databases were opened.

5. Fix a single-byte memory leak when the standard DB->del() interface was used to delete key/data pairs with duplicate data items.

### Hash Access Method Bug Fixes:

1. Fix a bug which could cause application failure or data corruption when deleting on-page duplicate items.

2. Fix a memory leak when closing cursors.

### Recno Access Method Bug Fixes:

1. Cursors that referenced deleted records were not correctly updated when the record was overwritten with new data, and would continue to return that the record was still in a "deleted" state.

2. Fix a bug where application specified read-modify-write semantics were ignored.

3. Remove lock-coupling behavior in tiny databases to avoid perpetual deadlock.

4. Fix a bug where root pages were not always correctly write-locked.

### Java API Changes and Bug Fixes

1. Fix compile include directory ordering, which could cause Java to be compiled using the wrong db.h include file.

### General Access Method Bug Fixes:

1. Fix a bug which left the read-modify-write semantics in place after the operation for which the application specified it completed.

2. Fix a bug which caused application failure if a NULL key argument was specified for the DB_AFTER, DB_BEFORE or DB_CURRENT flags to the DBcursor->get() interface.

3. Change the initial mutex timer back-off from 10ms to 1ms.

### Shared Memory Buffer Pool Subsystem Bug Fixes:

1. Fix a bug in large database files (>4Gb), which could potentially cause data corruption when a database was closed, reopened and new pages were then allocated.

2. Modify the memp_sync() interface code to no longer hold Berkeley DB region locks across memory allocation calls (for example, malloc(3)). This change significantly increases throughput in applications checkpointing large memory caches.

3. Modify the memory pool qsort(3) comparison function to work when called by badly written qsort(3) functions.

### Additional Bug Fixes:

1. Fix a bug in the Berkeley DB error functions where variable numbers of arguments were not correctly accessed on some architectures, for example, the PowerPC.

### System Porting and Build Procedure Changes:

1. Support installation into prefix directories for which multiple directory components do not yet exist.

2. Support installation into different system directories on a per-type basis, for example, all the binaries to one directory, and include files to another.

3. Fix a bug where the supplied portability routine memcpy() was not correctly compiled.

4. Modify auto-configuration to refuse to configure in the top-level distribution directory.