If a thread modifies a named MDB database and closes it before committing, the changes are lost.
Documented "don't do that".
mdb_dbi_close() could defer fully closing the DBI to the current write transaction if one exists. But that would require a mutex locked by [I think] mdb_env_commit(write txn), mdb_dbi_open, and mdb_dbi_close.
Test case (no nested txns):
Bogus test program. The mdb_dbi_open() should use a named database:
E(mdb_dbi_open(txn, NULL, rdonly ? 0 : MDB_CREATE, &dbi));
E(mdb_dbi_open(txn, "db", rdonly ? 0 : MDB_CREATE, &dbi));