ITS#7672 fix mdb_dbi_flags

Use a txn instead of env argument. Only return persistent flags.
vmware
Howard Chu 11 years ago
parent 4dd10d70a5
commit 2a28686e4f
  1. 4
      libraries/liblmdb/lmdb.h
  2. 7
      libraries/liblmdb/mdb.c

@ -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. /** @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[in] dbi A database handle returned by #mdb_dbi_open()
* @param[out] flags Address where the flags will be returned. * @param[out] flags Address where the flags will be returned.
* @return A non-zero error value on failure and 0 on success. * @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. /** @brief Close a database handle.
* *

@ -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; txn->mt_dbflags[slot] = dbflag;
memcpy(&txn->mt_dbs[slot], data.mv_data, sizeof(MDB_db)); memcpy(&txn->mt_dbs[slot], data.mv_data, sizeof(MDB_db));
*dbi = slot; *dbi = slot;
txn->mt_env->me_dbflags[slot] = txn->mt_dbs[slot].md_flags;
mdb_default_cmp(txn, slot); mdb_default_cmp(txn, slot);
if (!unused) { if (!unused) {
txn->mt_numdbs++; txn->mt_numdbs++;
@ -8004,12 +8003,12 @@ void mdb_dbi_close(MDB_env *env, MDB_dbi dbi)
free(ptr); 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? */ /* 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; return EINVAL;
*flags = env->me_dbflags[dbi]; *flags = txn->mt_dbs[dbi].md_flags & PERSISTENT_FLAGS;
return MDB_SUCCESS; return MDB_SUCCESS;
} }

Loading…
Cancel
Save