http://bugs.winehq.org/show_bug.cgi?id=29582
--- Comment #3 from Daniel Santos daniel.santos@pobox.com 2012-01-13 01:44:28 CST --- hmm, it would appear that this can actually be due to a failed call to SetFilePointer where the return value appears to be ignored by the app. The GUI thread 0x0009 appears to interact with thread 0x0023 for loading data and signaling each other back and forth. It would appear that the GUI thread is supposed to be waiting for something to happen, but thread 0x23 signals their semephore and leaves it that way, leading the GUI thread to burn the CPU hitting PeekMessageA, GetForegroundWindow
waiting for
Note: due to an incomplete timestamp mod, timestamps on trace statements (in milliseconds) are roughly 49.25 seconds behind other timestamps (which are in microseconds) and server traces are timestamp-less.
708.860908:0023:Call KERNEL32.SetFilePointer(000000e0,00000000,00000000,00000000) ret=0067ad93 758.129:0023:trace:ntdll:NtSetInformationFile (0xe0,0x6d2e8f8,0x6d2e8f0,0x00000008,0x0000000e) 0023: get_handle_fd( handle=00e0 ) 0023: *fd* 00e0 -> 34 0023: get_handle_fd() = 0 { type=1, cacheable=1, access=00120089, options=00000068 } 708.860934:0023:Ret KERNEL32.SetFilePointer() retval=00000000 ret=0067ad93 708.860940:0023:Call KERNEL32.ReadFile(000000e0,04a07800,00020000,06d2ea04,00000000) ret=0067adbb 758.129:0023:trace:file:ReadFile 0xe0 0x4a07800 131072 0x6d2ea04 (nil) 758.129:0023:trace:ntdll:NtReadFile (0xe0,(nil),(nil),(nil),0x6d2e908,0x4a07800,0x00020000,(nil),(nil)),partial stub! 758.129:0023:trace:ntdll:NtReadFile = SUCCESS (131072) 708.861018:0023:Ret KERNEL32.ReadFile() retval=00000001 ret=0067adbb
It's after this that it begins cycling on PeekMessageA, GetForegroundWindow, WaitForSingleObject and ReleaseSemephore. It doesn't do it forever, after some time, it proceeds, but this is one place that it transitions from apearing to behave normally to definitely misbehaving.
I'm not yet sure why the call to SetFilePointer failed. I believe this call should have caused it to seek to the beginning of the file (where the file pointer should have already been since it was just opened).