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