]> git.sur5r.net Git - openldap/blobdiff - libraries/liblmdb/mdb.c
ITS#7943 reinit txn flags
[openldap] / libraries / liblmdb / mdb.c
index 1e784ae11de1b8ad549037fd2b11aceed37a7cef..6cc343326efeb8543db073671e92625723daf938 100644 (file)
@@ -1083,7 +1083,6 @@ typedef struct MDB_xcursor {
 typedef struct MDB_pgstate {
        pgno_t          *mf_pghead;     /**< Reclaimed freeDB pages, or NULL before use */
        txnid_t         mf_pglast;      /**< ID of last used record, or 0 if !mf_pghead */
-       txnid_t         mf_pgoldest;    /**< ID of oldest reader last time we looked */
 } MDB_pgstate;
 
        /** The database environment. */
@@ -1119,10 +1118,10 @@ struct MDB_env {
        uint16_t        *me_dbflags;    /**< array of flags from MDB_db.md_flags */
        unsigned int    *me_dbiseqs;    /**< array of dbi sequence numbers */
        pthread_key_t   me_txkey;       /**< thread-key for readers */
+       txnid_t         me_pgoldest;    /**< ID of oldest reader last time we looked */
        MDB_pgstate     me_pgstate;             /**< state of old pages from freeDB */
 #      define          me_pglast       me_pgstate.mf_pglast
 #      define          me_pghead       me_pgstate.mf_pghead
-#      define          me_pgoldest     me_pgstate.mf_pgoldest
        MDB_page        *me_dpages;             /**< list of malloc'd blocks for re-use */
        /** IDL of pages that became unused in a write txn */
        MDB_IDL         me_free_pgs;
@@ -1949,7 +1948,7 @@ mdb_page_alloc(MDB_cursor *mc, int num, MDB_page **mp)
 #else
        enum { Paranoid = 0, Max_retries = INT_MAX /*infinite*/ };
 #endif
-       int rc, retry = num * 20;
+       int rc, retry = num * 60;
        MDB_txn *txn = mc->mc_txn;
        MDB_env *env = txn->mt_env;
        pgno_t pgno, *mop = env->me_pghead;
@@ -2627,6 +2626,7 @@ mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **ret)
        if (!(flags & MDB_RDONLY)) {
                if (!parent) {
                        txn = env->me_txn0;
+                       txn->mt_flags = 0;
                        goto ok;
                }
                size += env->me_maxdbs * sizeof(MDB_cursor *);
@@ -4560,6 +4560,7 @@ mdb_env_close0(MDB_env *env, int excl)
        free(env->me_dbxs);
        free(env->me_path);
        free(env->me_dirty_list);
+       free(env->me_txn0);
        mdb_midl_free(env->me_free_pgs);
 
        if (env->me_flags & MDB_ENV_TXKEY) {