https://bugs.winehq.org/show_bug.cgi?id=43674
Bug ID: 43674 Summary: Oxygen Not Included: occasional hangs Product: Wine Version: 2.15 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: ntdll Assignee: wine-bugs@winehq.org Reporter: thelonewolfling@gmail.com Distribution: ---
Created attachment 59117 --> https://bugs.winehq.org/attachment.cgi?id=59117 Tailed log filtered on lines containing 0185 or RtlpWaitForCriticalSection
Every once in a while, Oxygen Not Included softlocks. By which I mean: screen stops updating, game does not respond to keyboard or mouse input, but the current sounds playing keep looping (!).
It seems to occur more often the later in the game you get, and more on higher speeds. By the time you get into the 'late' game (100 cycles+) it's >1x per cycle (10min), generally speaking. As the game has a fixed autosave of 1x per cycle, this rapidly becomes annoying.
My gut feeling is it's something to do with playing many sounds at once. ONI has many ambient sounds depending on what is on screen, and when working in areas that don't have much in them it doesn't seem to crash.
Unfortunately, this doesn't seem to be deterministic - or at least, if it is, there's enough PRNG-ness on ONI's side to hide it.
I managed to capture a (very laggy) WINEDEBUG=+relay,+seh,+tid log. Unfortunately, it's ~26GB. Even a .xz archive is ~260MB.
There is the following message when it hangs:
354297159:013d:err:ntdll:RtlpWaitForCriticalSection section 0x12d072c8 "?" wait timed out in thread 013d, blocked by 0185, retrying (60 sec)
(Note: the first number here is the line number (!), as this was using grep on the output file...)
Unfortunately, this seems to be more of a symptom than a cause. Great, so it timed out waiting for a lock... why? And where?
I can't even attach the log starting at the erroring line - even an .xz archive is 9MB...
I grepped through the log myself (filtered on threads 0185 & 013d), and found something interesting... For the most part, thread 0185 seems to be just allocating / freeing (RtlAllocateHeap / RtlFreeHeap). Then suddenly it switches behaviors with a NtRaiseException - see the attached filtered log file. My guess is that it's catching an error (and making a dump) but not handling it anywhere near gracefully.
This is with wine 2.15 staging.
What should be my next steps?
https://bugs.winehq.org/show_bug.cgi?id=43674
thelonewolfling@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Component|ntdll |-unknown
https://bugs.winehq.org/show_bug.cgi?id=43674
--- Comment #1 from thelonewolfling@gmail.com --- Created attachment 59118 --> https://bugs.winehq.org/attachment.cgi?id=59118 staging patches.txt
Output of wine --patches. wine --version is 2.15 staging
https://bugs.winehq.org/show_bug.cgi?id=43674
thelonewolfling@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Distribution|--- |Debian