mdbx: fix mdbx_env_set_option() for dp_initial & dp_limit.

Fixes https://github.com/erthink/libmdbx/issues/179

Change-Id: I925104a45148112e0ce94a069a7468e2b4fc8209
This commit is contained in:
Leonid Yuriev 2021-03-24 19:16:52 +03:00
parent b71206d119
commit c77494e2aa

View File

@ -21032,28 +21032,18 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
if (env->me_txn)
err = MDBX_EPERM /* unable change during transaction */;
else {
mdbx_dpl_clear(env->me_txn0->tw.dirtylist);
const unsigned value32 = (unsigned)value;
const pgno_t value32 = (pgno_t)value;
if (option == MDBX_opt_txn_dp_initial &&
env->me_options.dp_initial != value32) {
env->me_options.dp_initial = value32;
if (env->me_options.dp_limit < value32)
env->me_options.dp_limit = value32;
if (env->me_txn0->tw.dirtylist->detent < value32 &&
!mdbx_dpl_reserve(env->me_txn0, value32))
err = MDBX_ENOMEM;
else
env->me_options.dp_initial = value32;
}
if (option == MDBX_opt_txn_dp_limit &&
env->me_options.dp_limit != value32) {
if (env->me_txn0->tw.dirtylist->detent > value32 &&
!mdbx_dpl_reserve(env->me_txn0, value32))
err = MDBX_ENOMEM;
else {
if (env->me_options.dp_initial > value32)
env->me_options.dp_initial = value32;
env->me_options.dp_limit = value32;
}
env->me_options.dp_limit = value32;
if (env->me_options.dp_initial > value32)
env->me_options.dp_initial = value32;
}
}
break;