uhliarik commented on code in PR #49:
URL: https://github.com/apache/apr/pull/49#discussion_r1370095013


##########
dbm/apr_dbm_lmdb.c:
##########
@@ -216,9 +230,14 @@ static apr_status_t vt_lmdb_store(apr_dbm_t *dbm, 
apr_datum_t key,
 
     if ((rv = mdb_put(f->txn, f->dbi, &ckey, &cvalue, 0)) == 0) {
         /* commit transaction */
-        if (((rv = mdb_txn_commit(f->txn)) == MDB_SUCCESS)
-            && ((rv = mdb_txn_begin(f->env, NULL, 0, &f->txn)) == 
MDB_SUCCESS)) {
+        if ((rv = mdb_txn_commit(f->txn)) == MDB_SUCCESS){
             f->cursor = NULL;

Review Comment:
   I'm not sure about this. In the documentation[0] is said that after 
`mdb_txn_commit()`, cursor must not be used again. Therefore I thought that 
invalidating pointer is enough. 
   
   On the other hand, in the documentation is said: `Earlier documentation 
incorrectly said all cursors would be freed. Only write-transactions free 
cursors.`. So if I understand it correctly, read-only transaction would leave 
cursor not freed and so we must free it using `mdb_cursor_close(f->cursor);`?
   
   But in `mdb_txn_commit` function, there is `mdb_cursors_close()` [1] which 
looks like it closes all cursors [2].
   
   [0] 
http://www.lmdb.tech/doc/group__mdb.html#ga846fbd6f46105617ac9f4d76476f6597
   [1] 
https://github.com/LMDB/lmdb/blob/mdb.master/libraries/liblmdb/mdb.c#L4089C2-L4089C19
   [2] 
https://github.com/LMDB/lmdb/blob/mdb.master/libraries/liblmdb/mdb.c#L2927C1-L2927C18



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@apr.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to