From 9e15bd9b290dc99f63634e95c163c34b4af1cc08 Mon Sep 17 00:00:00 2001 From: Leonid Yuriev Date: Wed, 11 Jan 2023 21:09:50 +0300 Subject: [PATCH] =?UTF-8?q?mdbx-windows:=20=D1=83=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B5=D0=B3=D1=80=D0=B5?= =?UTF-8?q?=D1=81=D1=81=D0=B0=20ERROR=5FSHARING=5FVIOLATION=20=D0=B2=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B5=20MDBX=5FEXCLUSIVE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Спасибо maxc0d3r@protonmail.com за сообщение о проблеме. --- ChangeLog.md | 9 +++++++++ src/core.c | 9 +++++++-- src/osal.c | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 1dbd33b9..d6092b1d 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -6,8 +6,17 @@ and [by Yandex](https://translated.turbopages.org/proxy_u/ru-en.en/https/gitflic ## v0.13 (в разработке) +Благодарности: + + - Max за сообщение о проблеме ERROR_SHARING_VIOLATION + в режиме MDBX_EXCLUSIVE на Windows. + Исправления (без корректировок новых функций): + - Устранение регресса после коммита 474391c83c5f81def6fdf3b0b6f5716a87b78fbf + приводящего к возврату ERROR_SHARING_VIOLATION в Windows при открытии БД + в режиме MDBX_EXCLUSIVE для чтения-записи. + - Ограничиваем размер отображения при коротком read-only файле для предотвращении ошибки ERROR_NOT_ENOUGH_MEMORY в Windows, которая совсем не информативна для пользователя и возникает в этом случае. diff --git a/src/core.c b/src/core.c index d7ee6493..4ffe694c 100644 --- a/src/core.c +++ b/src/core.c @@ -14892,7 +14892,8 @@ __cold int mdbx_env_openW(MDBX_env *env, const wchar_t *pathname, #if defined(_WIN32) || defined(_WIN64) eASSERT(env, env->me_overlapped_fd == 0); 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)) { /* Запрошен режим MDBX_SAFE_NOSYNC | MDBX_WRITEMAP при активной опции * 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); 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, &env->me_dsync_fd, 0); if (MDBX_IS_ERROR(rc)) diff --git a/src/osal.c b/src/osal.c index dfe528e1..f1ae6ee7 100644 --- a/src/osal.c +++ b/src/osal.c @@ -1160,7 +1160,7 @@ MDBX_INTERNAL_FUNC void osal_ioring_destroy(osal_ioring_t *ior) { #else osal_free(ior->pool); #endif - memset(ior, -1, sizeof(osal_ioring_t)); + memset(ior, 0, sizeof(osal_ioring_t)); } /*----------------------------------------------------------------------------*/