Thanks a lot.
2015-04-03 2:54 GMT+08:00 Howard Chu <
hyc@symas.com>:
>
> hlaw wrote:
>>
>> Thank you!
>>
>> It appears that mdb_dbi_open() must be called before any read / write
>> access to a database in a transaction,
>
>
> True.
>
>> and all read / write have to be
>> done in a transaction?
>
>
> True.
>
>> If this is the case, is it correct that due to
>> the concurrency restriction above, there is essentially no concurrent
>> access (including read and write) to the same database in a
>> multi-threaded process,
>
>
> False.
>
>> since a database is available to one transaction
>> in a time?
>
>
> False. Reread the mdb_dbi_open doc.
http://symas.com/mdb/doc/group__mdb.html#gac08cad5b096925642ca359a6d6f0562a>
>>
>> 2015-03-30 19:52 GMT+08:00 Hallvard Breien Furuseth
>> <
h.b.furuseth@usit.uio.no <mailto:
h.b.furuseth@usit.uio.no>>:
>>
>> You're abusing mdb_dbi_open(). Its doc says:
>>
>> "This function must not be called from multiple concurrent
>> transactions in the same process. A transaction that uses this
>> function must finish (either commit or abort) before any other
>> transaction in the process may use this function."
>>
>> That text could have stood out a bit better in the doc:-(
>>
>> The error is simple for lmdb to try to catch, though without
>> locking it cannot guarantee to catch it. Try this patch:
>> <
http://folk.uio.no/hbf/__OpenLDAP/mdb.serial-open.diff>> <
http://folk.uio.no/hbf/OpenLDAP/mdb.serial-open.diff>>
>>
>> (Howard, this is branch "mdb/serial-open" in my UiO repo.)
>> Not sure if it should do more than this. E.g. attack mdb_drop
>> too. Maybe set MDB_TXN_ERROR since a program with broken
>> threading can break the DB.
>>
>> --
>> Hallvard
>>
>>
>
>
> --
> -- Howard Chu
> CTO, Symas Corp.
http://www.symas.com> Director, Highland Sun
http://highlandsun.com/hyc/> Chief Architect, OpenLDAP
http://www.openldap.org/project/