This repository has been archived by the owner on Sep 22, 2022. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 112
Recursive use of SRW-lock on Windows cause by MDBX_NOTLS
option.
#203
Labels
Comments
@vorot93, по-возможности проверьте это исправление в вашей "акуле". Здесь проблема устранена ценой определенных ограничений (см. комментарий в самом коммите), т.е. это "костыль". А уже после этого я намерен:
|
erthink
added a commit
that referenced
this issue
Jul 26, 2021
Acknowledgements: ----------------- - [Alex Sharov](https://github.com/AskAlexSharov) for reporting and testing. - [Andrea Lanfranchi](https://github.com/AndreaLanfranchi) for reporting bugs. - [Lionel Debroux](https://github.com/debrouxl) for fuzzing tests and reporting bugs. - [Sergey Fedotov](https://github.com/SergeyFromHell/) for [`node-mdbx` NodeJS bindings](https://www.npmjs.com/package/node-mdbx). - [Kris Zyp](https://github.com/kriszyp) for [`lmdbx-store` NodeJS bindings](https://github.com/kriszyp/lmdbx-store). - [Noel Kuntze](https://github.com/Thermi) for [draft Python bindings](https://github.com/erthink/libmdbx/commits/python-bindings). New features, extensions and improvements: ------------------------------------------ - [Allow to predefine/override `MDBX_BUILD_TIMESTAMP` for builds reproducibility](#201). - Added options support for `long-stochastic` script. - Avoided `MDBX_TXN_FULL` error for large transactions when possible. - The `MDBX_READERS_LIMIT` increased to `32767`. - Raise `MDBX_TOO_LARGE` under Valgrind/ASAN if being opened DB is 100 larger than RAM (to avoid hangs and OOM). - Minimized the size of poisoned/unpoisoned regions to avoid Valgrind/ASAN stuck. - Added more workarounds for QEMU for testing builds for 32-bit platforms, Alpha and Sparc architectures. - `mdbx_chk` now skips iteration & checking of DB' records if corresponding page-tree is corrupted (to avoid `SIGSEGV`, ASAN failures, etc). - Added more checks for [rare/fuzzing corruption cases](#217). Backward compatibility break: ----------------------------- - Use file `VERSION.txt` for version information instead of `VERSION` to avoid collision with `#include <version>`. - Rename `slice::from/to_FOO_bytes()` to `slice::envisage_from/to_FOO_length()'. - Rename `MDBX_TEST_EXTRA` make's variable to `MDBX_SMOKE_EXTRA`. - Some details of the C++ API have been changed for subsequent freezing. Fixes: ------ - Fixed excess meta-pages checks in case `mdbx_chk` is called to check the DB for a specific meta page and thus could prevent switching to the selected meta page, even if the check passed without errors. - Fixed [recursive use of SRW-lock on Windows cause by `MDBX_NOTLS` option](#203). - Fixed [log a warning during a new DB creation](#205). - Fixed [false-negative `mdbx_cursor_eof()` result](#207). - Fixed [`make install` with non-GNU `install` utility (OSX, BSD)](#208). - Fixed [installation by `CMake` in special cases by complete use `GNUInstallDirs`'s variables](#209). - Fixed [C++ Buffer issue with `std::string` and alignment](#191). - Fixed `safe64_reset()` for platforms without atomic 64-bit compare-and-swap. - Fixed hang/shutdown on big-endian platforms without `__cxa_thread_atexit()`. - Fixed [using bad meta-pages if DB was partially/recoverable corrupted](#217). - Fixed extra `noexcept` for `buffer::&assign_reference()`. - Fixed `bootid` generation on Windows for case of change system' time. - Fixed [test framework keygen-related issue](#127).
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Windows is unable to extend or shrink mapped region without closing/unmap it.
So in Windows, a SRW-lock is used to protect threads with a read transaction from accessing a temporary unmapped region during it shrink or expand.
However, with
MDBX_NOTLS
option transactions could be used from other threads and the same thread could start more than one read transaction.Thus this causes recursive acquiring the same SRW-lock by the same thread.
This should be fixed, or at least documented:
MDBX_NOTLS
.The text was updated successfully, but these errors were encountered: