]> git.sur5r.net Git - openldap/commitdiff
Add error MDB_PROBLEM, replace some MDB_CORRUPTED
authorHallvard Furuseth <hallvard@openldap.org>
Thu, 14 Jul 2016 03:53:21 +0000 (05:53 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Thu, 14 Jul 2016 03:53:21 +0000 (05:53 +0200)
When problem is most likely in txn, not on disk.

libraries/liblmdb/lmdb.h
libraries/liblmdb/mdb.c

index 85dc50d580c81ca2d44a3a075b736bfa64acbb6b..d30ab648b3d30fee2c095a0865ce61cebc64af60 100644 (file)
@@ -456,8 +456,10 @@ typedef enum MDB_cursor_op {
 #define MDB_BAD_VALSIZE                (-30781)
        /** The specified DBI was changed unexpectedly */
 #define MDB_BAD_DBI            (-30780)
+       /** Unexpected problem - txn should abort */
+#define MDB_PROBLEM            (-30779)
        /** The last defined error code */
-#define MDB_LAST_ERRCODE       MDB_BAD_DBI
+#define MDB_LAST_ERRCODE       MDB_PROBLEM
 /** @} */
 
 /** @brief Statistics for a database in the environment */
index 3777ab314f742eb44bfcd25066331a85c2a26a1f..df31780d0c3dcd6f05d660918cf3c9a7218ed15e 100644 (file)
@@ -1565,6 +1565,7 @@ static char *const mdb_errstr[] = {
        "MDB_BAD_TXN: Transaction must abort, has a child, or is invalid",
        "MDB_BAD_VALSIZE: Unsupported size of key/DB name/data, or wrong DUPFIXED size",
        "MDB_BAD_DBI: The specified DBI handle was closed/changed unexpectedly",
+       "MDB_PROBLEM: Unexpected problem - txn should abort",
 };
 
 char *
@@ -2001,7 +2002,7 @@ mdb_page_loose(MDB_cursor *mc, MDB_page *mp)
                                        if (mp != dl[x].mptr) { /* bad cursor? */
                                                mc->mc_flags &= ~(C_INITIALIZED|C_EOF);
                                                txn->mt_flags |= MDB_TXN_ERROR;
-                                               return MDB_CORRUPTED;
+                                               return MDB_PROBLEM;
                                        }
                                        /* ok, it's ours */
                                        loose = 1;
@@ -2611,7 +2612,7 @@ mdb_page_touch(MDB_cursor *mc)
                                if (mp != dl[x].mptr) { /* bad cursor? */
                                        mc->mc_flags &= ~(C_INITIALIZED|C_EOF);
                                        txn->mt_flags |= MDB_TXN_ERROR;
-                                       return MDB_CORRUPTED;
+                                       return MDB_PROBLEM;
                                }
                                return 0;
                        }
@@ -6263,7 +6264,7 @@ mdb_ovpage_free(MDB_cursor *mc, MDB_page *mp)
                                j = ++(dl[0].mid);
                                dl[j] = ix;             /* Unsorted. OK when MDB_TXN_ERROR. */
                                txn->mt_flags |= MDB_TXN_ERROR;
-                               return MDB_CORRUPTED;
+                               return MDB_PROBLEM;
                        }
                }
                txn->mt_dirty_room++;
@@ -7656,7 +7657,7 @@ put_sub:
                return rc;
 bad_sub:
                if (rc == MDB_KEYEXIST) /* should not happen, we deleted that item */
-                       rc = MDB_CORRUPTED;
+                       rc = MDB_PROBLEM;
        }
        mc->mc_txn->mt_flags |= MDB_TXN_ERROR;
        return rc;