mdbx-windows: устранение регресса ERROR_SHARING_VIOLATION в режиме MDBX_EXCLUSIVE.

Спасибо maxc0d3r@protonmail.com за сообщение о проблеме.
This commit is contained in:
Leonid Yuriev
2023-01-11 21:09:50 +03:00
committed by Леонид Юрьев (Leonid Yuriev)
parent 0159f97e94
commit 9e15bd9b29
3 changed files with 17 additions and 3 deletions

View File

@@ -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))

View File

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