]> git.sur5r.net Git - openldap/commitdiff
ITS#7594 Invalidate a dropped MDB DB's cursors.
authorHallvard Furuseth <hallvard@openldap.org>
Thu, 13 Jun 2013 06:58:24 +0000 (08:58 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Thu, 13 Jun 2013 06:58:24 +0000 (08:58 +0200)
libraries/liblmdb/mdb.c

index 940335730beb3b94cf9e9b3d08ecc49cb75d7704..2791e798e79cc1f003f0dbb2c61005fefbc19684 100644 (file)
@@ -7450,7 +7450,7 @@ mdb_drop0(MDB_cursor *mc, int subs)
 
 int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del)
 {
-       MDB_cursor *mc;
+       MDB_cursor *mc, *m2;
        int rc;
 
        if (!txn || !dbi || dbi >= txn->mt_numdbs || (unsigned)del > 1 || !(txn->mt_dbflags[dbi] & DB_VALID))
@@ -7464,6 +7464,9 @@ int mdb_drop(MDB_txn *txn, MDB_dbi dbi, int del)
                return rc;
 
        rc = mdb_drop0(mc, mc->mc_db->md_flags & MDB_DUPSORT);
+       /* Invalidate the dropped DB's cursors */
+       for (m2 = mc->mc_txn->mt_cursors[dbi]; m2; m2 = m2->mc_next)
+               m2->mc_flags &= ~C_INITIALIZED;
        if (rc)
                goto leave;