mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-06 18:34:13 +08:00
mdbx: исправление неожиданного MDBX_BUSY
из mdbx_env_set_option()
.
This commit is contained in:
parent
91a6e84cab
commit
d4e67d14ce
33
src/core.c
33
src/core.c
@ -23467,13 +23467,16 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
|||||||
return MDBX_EPERM;
|
return MDBX_EPERM;
|
||||||
if (unlikely(value > SIZE_MAX - 65536))
|
if (unlikely(value > SIZE_MAX - 65536))
|
||||||
return MDBX_TOO_LARGE;
|
return MDBX_TOO_LARGE;
|
||||||
if (atomic_store32(&env->me_lck->mti_autosync_threshold,
|
value = bytes2pgno(env, (size_t)value + env->me_psize - 1);
|
||||||
bytes2pgno(env, (size_t)value + env->me_psize - 1),
|
if ((uint32_t)value != atomic_load32(&env->me_lck->mti_autosync_threshold,
|
||||||
mo_Relaxed) != 0 &&
|
mo_AcquireRelease) &&
|
||||||
(env->me_flags & MDBX_ENV_ACTIVE)) {
|
atomic_store32(&env->me_lck->mti_autosync_threshold, (uint32_t)value,
|
||||||
err = mdbx_env_sync_poll(env);
|
mo_Relaxed)
|
||||||
if (unlikely(MDBX_IS_ERROR(err)))
|
/* Дергаем sync(force=off) только если задано новое не-нулевое значение
|
||||||
return err;
|
* и мы вне транзакции */
|
||||||
|
&& lock_needed) {
|
||||||
|
err = env_sync(env, false, false);
|
||||||
|
if (err == /* нечего сбрасывать на диск */ MDBX_RESULT_TRUE)
|
||||||
err = MDBX_SUCCESS;
|
err = MDBX_SUCCESS;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -23487,13 +23490,15 @@ __cold int mdbx_env_set_option(MDBX_env *env, const MDBX_option_t option,
|
|||||||
return MDBX_EPERM;
|
return MDBX_EPERM;
|
||||||
if (unlikely(value > UINT32_MAX))
|
if (unlikely(value > UINT32_MAX))
|
||||||
return MDBX_TOO_LARGE;
|
return MDBX_TOO_LARGE;
|
||||||
if (atomic_store64(&env->me_lck->mti_autosync_period,
|
value = osal_16dot16_to_monotime((uint32_t)value);
|
||||||
osal_16dot16_to_monotime((uint32_t)value),
|
if (value != atomic_load64(&env->me_lck->mti_autosync_period,
|
||||||
mo_Relaxed) != 0 &&
|
mo_AcquireRelease) &&
|
||||||
(env->me_flags & MDBX_ENV_ACTIVE)) {
|
atomic_store64(&env->me_lck->mti_autosync_period, value, mo_Relaxed)
|
||||||
err = mdbx_env_sync_poll(env);
|
/* Дергаем sync(force=off) только если задано новое не-нулевое значение
|
||||||
if (unlikely(MDBX_IS_ERROR(err)))
|
* и мы вне транзакции */
|
||||||
return err;
|
&& lock_needed) {
|
||||||
|
err = env_sync(env, false, false);
|
||||||
|
if (err == /* нечего сбрасывать на диск */ MDBX_RESULT_TRUE)
|
||||||
err = MDBX_SUCCESS;
|
err = MDBX_SUCCESS;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user