https://bugs.winehq.org/show_bug.cgi?id=56389
Hristo Venev hristo@venev.name changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |hristo@venev.name
--- Comment #11 from Hristo Venev hristo@venev.name --- The issue appears to be a deadlock while reading some files. Here is what happens in the wow64 case:
0144:trace:sync:NtWaitForMultipleObjects -> 0 0144:trace:file:GetOverlappedResultEx (000001D4 03990014 03CBFEE0 0 0) 0144:trace:file:GetOverlappedResultEx (000001D4 03990014 03CBFEC8 0 0) 0144:trace:sync:NtSetEvent handle 0x10c, prev_state (nil) 0148:trace:sync:NtWaitForMultipleObjects -> 0 0144:trace:sync:NtWaitForMultipleObjects wait_any 1, alertable 0, handles {0x104}, timeout (infinite) 0148:trace:sync:NtResetEvent handle 0x10c, prev_state (nil) 0148:trace:sync:NtSetEvent handle 0x120, prev_state (nil) 0148:trace:sync:NtSetEvent handle 0x120, prev_state (nil) 0148:trace:sync:NtWaitForMultipleObjects wait_any 1, alertable 0, handles {0x11c}, timeout (infinite) 012c:trace:sync:NtWaitForMultipleObjects -> 0 012c:trace:file:ReadFile 000001D4 7FBB0000 524288 00000000 03990014 012c:trace:file:NtReadFile (0x1d4,0x104,(nil),0x3990014,0x7ffffe1ff410,0x7fbb0000,0x00080000,0x12f7c0,(nil)) 012c:trace:file:NtReadFile = SUCCESS (524288) 012c:trace:sync:NtSetEvent handle 0x104, prev_state (nil) 0144:trace:sync:NtWaitForMultipleObjects -> 0 0144:trace:file:GetOverlappedResultEx (000001D4 03990014 03CBFEE0 0 0) 0144:trace:sync:NtWaitForMultipleObjects wait_any 1, alertable 0, handles {0x104}, timeout (infinite) <deadlock; threads 0164/0168 handle audio and can be ignored>
whereas in the non-wow64 the thread does not seem to perform the second wait:
0218:trace:sync:NtWaitForMultipleObjects -> 0 0218:trace:file:GetOverlappedResultEx (000001E4 02EB0014 033DFEE0 0 0) 0218:trace:file:GetOverlappedResultEx (000001E4 02EB0014 033DFEC8 0 0) 0218:trace:sync:NtSetEvent handle 0x11c, prev_state (nil) 0218:trace:sync:NtWaitForMultipleObjects wait_any 1, alertable 0, handles {0x114}, timeout (infinite) 021c:trace:sync:NtWaitForMultipleObjects -> 0 021c:trace:sync:NtResetEvent handle 0x11c, prev_state (nil) 021c:trace:sync:NtSetEvent handle 0x130, prev_state (nil) 021c:trace:sync:NtSetEvent handle 0x130, prev_state (nil) 021c:trace:sync:NtWaitForMultipleObjects wait_any 1, alertable 0, handles {0x12c}, timeout (infinite) 0200:trace:sync:NtWaitForMultipleObjects -> 0 0200:trace:file:ReadFile 000001E4 7FBB0000 524288 00000000 02EB0014 0200:trace:file:NtReadFile (0x1e4,0x114,(nil),0x2eb0014,0x2eb0014,0x7fbb0000,0x00080000,0x1cbf7c0,(nil)) 0200:trace:file:NtReadFile = SUCCESS (524288) 0200:trace:sync:NtSetEvent handle 0x114, prev_state (nil) 0218:trace:sync:NtWaitForMultipleObjects -> 0 0218:trace:file:GetOverlappedResultEx (000001E4 02EB0014 033DFEE0 0 0) <other threads doing stuff> 0218:trace:file:GetOverlappedResultEx (000001E4 02EB0014 033DFEC8 0 0) 0218:trace:file:ReadFile 000001E4 7FC30000 524288 00000000 02EB0014 0218:trace:file:NtReadFile (0x1e4,0x114,(nil),0x2eb0014,0x2eb0014,0x7fc30000,0x00080000,0x33dfe38,(nil))
This is also the first group of calls to `GetOverlappedResultEx`. Perhaps something is wrong there?