@kinke updated dlang/dmd pull request #14901 "[stable] druntime: Fix InvalidMemoryOperation error on Windows when throwing exceptions from finalizers" fixing this issue:
- Fix Issue 23731 - InvalidMemoryOperation error on Windows when throwing exceptions from finalizers
A v2.102 regression, which newly enabled `StackTrace` constructions
from within GC finalizers. The construction is `@nogc`, but
apparently depends on the `typeid(StackTrace)` monitor having been
allocated already, i.e., a previous `StackTrace` construction.
So pre-allocate a dedicated `Mutex` in the module constructor to
make the `StackTrace` construction really `@nogc`.
`druntime/test/allocations/src/alloc_from_assert.d` then passes on
Windows again (not tested by DMD, but by LDC).
While at it, also prevent `InvalidMemoryOperation` errors when trying
to print exceptions within finalizers - by not resolving anything
(=> empty printed trace), as resolving currently heavily depends on
the GC.
https://github.com/dlang/dmd/pull/14901
Comment #2 by dlang-bot — 2023-02-22T09:17:31Z
dlang/dmd pull request #14901 "[stable] druntime: Fix InvalidMemoryOperation error on Windows when throwing exceptions from finalizers" was merged into stable:
- 936e7e26bbefeb2172686f5c828655ac9e521376 by Martin Kinkelin:
Fix Issue 23731 - InvalidMemoryOperation error on Windows when throwing exceptions from finalizers
A v2.102 regression, which newly enabled `StackTrace` constructions
from within GC finalizers. The construction is `@nogc`, but
apparently depends on the `typeid(StackTrace)` monitor having been
allocated already, i.e., a previous `StackTrace` construction.
So pre-allocate a dedicated `Mutex` in the module constructor to
make the `StackTrace` construction really `@nogc`.
`druntime/test/allocations/src/alloc_from_assert.d` then passes on
Windows again (not tested by DMD, but by LDC).
While at it, also prevent `InvalidMemoryOperation` errors when trying
to print exceptions within finalizers - by not resolving anything
(=> empty printed trace), as resolving currently heavily depends on
the GC.
https://github.com/dlang/dmd/pull/14901
Comment #3 by dlang-bot — 2023-03-01T21:57:43Z
dlang/dmd pull request #14938 "merge stable" was merged into master:
- a54fbab882b8a4c7fc86086dd1a414e9324dea6c by Martin Kinkelin:
[stable] druntime: Fix InvalidMemoryOperation error on Windows when throwing exceptions from finalizers (#14901)
* Fix Issue 23731 - InvalidMemoryOperation error on Windows when throwing exceptions from finalizers
A v2.102 regression, which newly enabled `StackTrace` constructions
from within GC finalizers. The construction is `@nogc`, but
apparently depends on the `typeid(StackTrace)` monitor having been
allocated already, i.e., a previous `StackTrace` construction.
So pre-allocate a dedicated `Mutex` in the module constructor to
make the `StackTrace` construction really `@nogc`.
`druntime/test/allocations/src/alloc_from_assert.d` then passes on
Windows again (not tested by DMD, but by LDC).
While at it, also prevent `InvalidMemoryOperation` errors when trying
to print exceptions within finalizers - by not resolving anything
(=> empty printed trace), as resolving currently heavily depends on
the GC.
* [work around cyclic modules dependency...]
* druntime: Test test/allocations/src/alloc_from_assert.d on Windows too
As it regressed with v2.102.
https://github.com/dlang/dmd/pull/14938