mdbx-windows: устранение регресса ERROR_SHARING_VIOLATION в режиме MDBX_EXCLUSIVE.
Спасибо maxc0d3r@protonmail.com за сообщение о проблеме.
This commit is contained in:
parent
0159f97e94
commit
9e15bd9b29
|
@ -6,8 +6,17 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic
|
||||||
|
|
||||||
## v0.13 (в разработке)
|
## v0.13 (в разработке)
|
||||||
|
|
||||||
|
Благодарности:
|
||||||
|
|
||||||
|
- Max <maxc0d3r@protonmail.com> за сообщение о проблеме ERROR_SHARING_VIOLATION
|
||||||
|
в режиме MDBX_EXCLUSIVE на Windows.
|
||||||
|
|
||||||
Исправления (без корректировок новых функций):
|
Исправления (без корректировок новых функций):
|
||||||
|
|
||||||
|
- Устранение регресса после коммита 474391c83c5f81def6fdf3b0b6f5716a87b78fbf
|
||||||
|
приводящего к возврату ERROR_SHARING_VIOLATION в Windows при открытии БД
|
||||||
|
в режиме MDBX_EXCLUSIVE для чтения-записи.
|
||||||
|
|
||||||
- Ограничиваем размер отображения при коротком read-only файле для
|
- Ограничиваем размер отображения при коротком read-only файле для
|
||||||
предотвращении ошибки ERROR_NOT_ENOUGH_MEMORY в Windows, которая совсем
|
предотвращении ошибки ERROR_NOT_ENOUGH_MEMORY в Windows, которая совсем
|
||||||
не информативна для пользователя и возникает в этом случае.
|
не информативна для пользователя и возникает в этом случае.
|
||||||
|
|
|
@ -14892,7 +14892,8 @@ __cold int mdbx_env_openW(MDBX_env *env, const wchar_t *pathname,
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
eASSERT(env, env->me_overlapped_fd == 0);
|
eASSERT(env, env->me_overlapped_fd == 0);
|
||||||
bool ior_direct = false;
|
bool ior_direct = false;
|
||||||
if (!(flags & (MDBX_RDONLY | MDBX_SAFE_NOSYNC | MDBX_NOMETASYNC))) {
|
if (!(flags &
|
||||||
|
(MDBX_RDONLY | MDBX_SAFE_NOSYNC | MDBX_NOMETASYNC | MDBX_EXCLUSIVE))) {
|
||||||
if (MDBX_AVOID_MSYNC && (flags & MDBX_WRITEMAP)) {
|
if (MDBX_AVOID_MSYNC && (flags & MDBX_WRITEMAP)) {
|
||||||
/* Запрошен режим MDBX_SAFE_NOSYNC | MDBX_WRITEMAP при активной опции
|
/* Запрошен режим MDBX_SAFE_NOSYNC | MDBX_WRITEMAP при активной опции
|
||||||
* MDBX_AVOID_MSYNC.
|
* MDBX_AVOID_MSYNC.
|
||||||
|
@ -14964,7 +14965,11 @@ __cold int mdbx_env_openW(MDBX_env *env, const wchar_t *pathname,
|
||||||
osal_fseek(env->me_lfd, safe_parking_lot_offset);
|
osal_fseek(env->me_lfd, safe_parking_lot_offset);
|
||||||
|
|
||||||
eASSERT(env, env->me_dsync_fd == INVALID_HANDLE_VALUE);
|
eASSERT(env, env->me_dsync_fd == INVALID_HANDLE_VALUE);
|
||||||
if (!(flags & (MDBX_RDONLY | MDBX_SAFE_NOSYNC | MDBX_DEPRECATED_MAPASYNC))) {
|
if (!(flags & (MDBX_RDONLY | MDBX_SAFE_NOSYNC | MDBX_DEPRECATED_MAPASYNC
|
||||||
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
|
| MDBX_EXCLUSIVE
|
||||||
|
#endif /* !Windows */
|
||||||
|
))) {
|
||||||
rc = osal_openfile(MDBX_OPEN_DXB_DSYNC, env, env_pathname.dxb,
|
rc = osal_openfile(MDBX_OPEN_DXB_DSYNC, env, env_pathname.dxb,
|
||||||
&env->me_dsync_fd, 0);
|
&env->me_dsync_fd, 0);
|
||||||
if (MDBX_IS_ERROR(rc))
|
if (MDBX_IS_ERROR(rc))
|
||||||
|
|
|
@ -1160,7 +1160,7 @@ MDBX_INTERNAL_FUNC void osal_ioring_destroy(osal_ioring_t *ior) {
|
||||||
#else
|
#else
|
||||||
osal_free(ior->pool);
|
osal_free(ior->pool);
|
||||||
#endif
|
#endif
|
||||||
memset(ior, -1, sizeof(osal_ioring_t));
|
memset(ior, 0, sizeof(osal_ioring_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
Loading…
Reference in New Issue