Open Geod24 opened 3 years ago
There seems to be a double-destruction bug that has been introduced by dtorFields: https://run.dlang.io/is/l0nsn4
Thanks for the fast reduction! Reported as https://issues.dlang.org/show_bug.cgi?id=21989 . That's pretty bad :/
Situation: A client connects to a node. The node crashes (e.g. SEGV) or just abruptly drops the connection.
The following error is triggeredm client side:
(I'm on OSX, so line numbers are botched) However, what was also triggered was an
InvalidMemoryOperationError
. Using LLDB, I could see that theInvalidMemoryOperationError
was triggered by anassert
triggering in a destructor, andassert
allocating on failure. This is an upstream bug (reported in #248 ) and will be fixed in the next release (v2.097.0).The assertion in question, obviously, shouldn't fail: https://github.com/vibe-d/vibe-core/blob/519d1c0fe7c0e5c5fcde9f72ecc4fefa207df109/source/vibe/internal/freelistref.d#L175
So after going down that rabbit hole, I was left wondering why on earth the assert fails. Luckily I have most major DMD change memorized so I added a
-revert=dtorfields
to my config and theassert
stopped failing.-preview=dtorfields
have been enabled by default since v2.096.0 and that matches the timeline of when things started to spuriously fail for us.