From: Howard Chu Date: Tue, 27 Aug 2013 13:28:30 +0000 (-0700) Subject: ITS#7672 fix mdb_dbi_flags X-Git-Tag: OPENLDAP_REL_ENG_2_4_37~39^2~9 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2a28686e4f56cf539e817661728e6c05de339eba;p=openldap ITS#7672 fix mdb_dbi_flags Use a txn instead of env argument. Only return persistent flags. --- diff --git a/libraries/liblmdb/lmdb.h b/libraries/liblmdb/lmdb.h index ef284d9c7e..b2c3861ac9 100644 --- a/libraries/liblmdb/lmdb.h +++ b/libraries/liblmdb/lmdb.h @@ -920,12 +920,12 @@ int mdb_stat(MDB_txn *txn, MDB_dbi dbi, MDB_stat *stat); /** @brief Retrieve the DB flags for a database handle. * - * @param[in] env An environment handle returned by #mdb_env_create() + * @param[in] txn A transaction handle returned by #mdb_txn_begin() * @param[in] dbi A database handle returned by #mdb_dbi_open() * @param[out] flags Address where the flags will be returned. * @return A non-zero error value on failure and 0 on success. */ -int mdb_dbi_flags(MDB_env *env, MDB_dbi dbi, unsigned int *flags); +int mdb_dbi_flags(MDB_txn *txn, MDB_dbi dbi, unsigned int *flags); /** @brief Close a database handle. * diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index e34f7951b3..835a8a8603 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -7968,7 +7968,6 @@ int mdb_dbi_open(MDB_txn *txn, const char *name, unsigned int flags, MDB_dbi *db txn->mt_dbflags[slot] = dbflag; memcpy(&txn->mt_dbs[slot], data.mv_data, sizeof(MDB_db)); *dbi = slot; - txn->mt_env->me_dbflags[slot] = txn->mt_dbs[slot].md_flags; mdb_default_cmp(txn, slot); if (!unused) { txn->mt_numdbs++; @@ -8004,12 +8003,12 @@ void mdb_dbi_close(MDB_env *env, MDB_dbi dbi) free(ptr); } -int mdb_dbi_flags(MDB_env *env, MDB_dbi dbi, unsigned int *flags) +int mdb_dbi_flags(MDB_txn *txn, MDB_dbi dbi, unsigned int *flags) { /* We could return the flags for the FREE_DBI too but what's the point? */ - if (dbi < MAIN_DBI || dbi >= env->me_numdbs) + if (txn == NULL || dbi < MAIN_DBI || dbi >= txn->mt_numdbs) return EINVAL; - *flags = env->me_dbflags[dbi]; + *flags = txn->mt_dbs[dbi].md_flags & PERSISTENT_FLAGS; return MDB_SUCCESS; }