In versions of Berkeley DB before 4.3, the error ENOMEM was used to
indicate that the buffer in a DBT configured with
DB_DBT_USERMEM was too small to hold a key or data item being
retrieved. The 4.3 release adds a new error, DB_BUFFER_SMALL
,
that is returned in this case.
The reason for the change is that the use of ENOMEM was ambiguous: calls such as DB->get() or DBC->get() could return ENOMEM either if a DBT was too small or if some resource was exhausted.
The result is that starting with the 4.3 release, C applications should
always treat ENOMEM as a fatal error. Code that checked for
the ENOMEM return and allocated a new buffer should be changed
to check for DB_BUFFER_SMALL
.
In C++ applications configured for exceptions, a DbMemoryException will continue to be thrown in both cases, and applications should check the errno in the exception to determine which error occurred.
In Java applications, a DbMemoryException will be thrown when a Dbt is too small to hold a return value, and an OutOfMemoryError will be thrown in all cases of resource exhaustion.