[Date Prev][Date Next]
Re: (ITS#7515) Nested liblmdb transaction bugs
> I wrote:
>>> Can't use a DBI from an aborted child txn, unlike aborted main 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.
> To get more consistent behavior, if that wasn't clear: Any parent
> txn will receive the DBI independently of commit/abort, just like
> the MDB_env. Future children of a preexisting txn still differ,
> which is probably for the best. Changing that would take locking.
After much discussion, this part has been reverted. The rationale is simple:
nothing created inside a TXN may be visible outside the TXN until the TXN
successfully commits. On an abort or failed commit, all DBIs opened in the TXN
are automatically closed, because technically they never existed.
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/