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

Re: Resizing of LMDB map



Hi Howard!

On 2018-11-12 21:21, Howard Chu wrote:
> Daniel Kraft wrote:
>> I'm trying to use LMDB in a way that automatically resizes the map
>> whenever it becomes too small, i.e. a function fails with MDB_MAP_FULL.
>> I've created and attached a program that resembles my real usecase in a
>> very simplified fashion:  It just writes data to the database, and tries
>> to double the map size whenever MDB_MAP_FULL is received.
>>
>> However, for me this program (as well as my real code) produces a
>> segfault in the mdb_put call that follows after the first resize.  What
>> am I doing wrong here, and how can I correctly implement a resize when full?
> 
> You're attempting to use the txn after committing it. This is basically
> a use-after-free attempt, which is why you get a SEGV.

Ah ok, so mdb_txn_commit also frees the transaction if it then actually
fails with MDB_MAP_FULL -- I was missing that.  By avoiding the
mdb_txn_abort in that case, my example code indeed works now!

So is it correct to assume that the transaction is "effectively aborted"
after mdb_txn_commit fails with MDB_MAP_FULL (or, for that matter, any
error)?

Thanks a lot!

Yours,
Daniel

-- 
https://www.domob.eu/
OpenPGP: 1142 850E 6DFF 65BA 63D6  88A8 B249 2AC4 A733 0737
Namecoin: id/domob -> https://nameid.org/?name=domob
--
3.6.0: Bar-Pri-Ran-Rog-Sam-Val-Wiz
To go: Arc-Cav-Hea-Kni-Mon-Tou

Attachment: signature.asc
Description: OpenPGP digital signature