[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#7515) Nested liblmdb transaction bugs



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."

-- 
Hallvard