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)); } /*----------------------------------------------------------------------------*/