I wrote:
Fixed in mdb.master, except:
Can't use a DBI from an aborted child txn, unlike aborted main txn:
Yet it may be possible to use the DBI in the parent txn if mdb_dbi_open() reused a closed DBI - but it may have the wrong flags and cmp functions, or also wrong MDB_db if the close happened after txn_begin.
Fixing this caused problems and got reverted. The DBI is available to next non-nested txn
Well, closing the DBI in mdb_txn_abort() caused problems. A fix in the opposite direction is easy, if we want DBIs to work that way: mdb_env_open() can open the DBI in any parent txns too.
ldbm.h:
"[The database handle] denotes the name and parameters of a database, independently of whether such a database exists. It will not exist if the transaction which created it aborted, nor if another process deleted it.
Preexisting transactions, other than the current transaction and any parents, must not use the new handle. Nor must their children."