]> git.sur5r.net Git - openldap/commitdiff
ITS#8321 fix mdb_cursor_shadow()
authorHoward Chu <hyc@openldap.org>
Mon, 23 Nov 2015 01:13:16 +0000 (01:13 +0000)
committerHoward Chu <hyc@openldap.org>
Mon, 23 Nov 2015 01:49:37 +0000 (01:49 +0000)
Set a valid txn so that cursor fixup code works on the shadows

libraries/liblmdb/mdb.c

index a4d2aad57aecce92fa3c33780fdabe2feabb0c69..bf3b4ba0ab15491c56a6cbb2fc79c2caca79cb45 100644 (file)
@@ -2489,14 +2489,15 @@ mdb_cursor_shadow(MDB_txn *src, MDB_txn *dst)
                                *bk = *mc;
                                mc->mc_backup = bk;
                                mc->mc_db = &dst->mt_dbs[i];
-                               /* Kill pointers into src - and dst to reduce abuse: The
-                                * user may not use mc until dst ends. Otherwise we'd...
+                               /* Kill pointers into src to reduce abuse: The
+                                * user may not use mc until dst ends. But we need a valid
+                                * txn pointer here for cursor fixups to keep working.
                                 */
-                               mc->mc_txn    = NULL;   /* ...set this to dst */
-                               mc->mc_dbflag = NULL;   /* ...and &dst->mt_dbflags[i] */
+                               mc->mc_txn    = dst;
+                               mc->mc_dbflag = &dst->mt_dbflags[i];
                                if ((mx = mc->mc_xcursor) != NULL) {
                                        *(MDB_xcursor *)(bk+1) = *mx;
-                                       mx->mx_cursor.mc_txn = NULL; /* ...and dst. */
+                                       mx->mx_cursor.mc_txn = dst;
                                }
                                mc->mc_next = dst->mt_cursors[i];
                                dst->mt_cursors[i] = mc;