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 (в разработке)
|
||||
|
||||
Благодарности:
|
||||
|
||||
- Max <maxc0d3r@protonmail.com> за сообщение о проблеме ERROR_SHARING_VIOLATION
|
||||
в режиме MDBX_EXCLUSIVE на Windows.
|
||||
|
||||
Исправления (без корректировок новых функций):
|
||||
|
||||
- Устранение регресса после коммита 474391c83c5f81def6fdf3b0b6f5716a87b78fbf
|
||||
приводящего к возврату ERROR_SHARING_VIOLATION в Windows при открытии БД
|
||||
в режиме MDBX_EXCLUSIVE для чтения-записи.
|
||||
|
||||
- Ограничиваем размер отображения при коротком read-only файле для
|
||||
предотвращении ошибки 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)
|
||||
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))
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
|
Loading…
Reference in New Issue