http://bugs.winehq.org/show_bug.cgi?id=31442
--- Comment #43 from voidcastr voidcastr@gmail.com 2012-10-08 07:17:29 CDT --- I added some trace to message.c:send_message(...) TRACE_(mytrace)("dest_tid: %08x\n", info->dest_tid); TRACE_(mytrace)("this tid: %08x\n", GetCurrentThreadId()); TRACE_(mytrace)("message: %u\n", info->msg); right before the call of ret = send_inter_thread_message( info, &result );.
Result:
0044:trace:mytrace:send_message dest_tid: 0000002f 0044:trace:mytrace:send_message this tid: 00000044 0044:trace:mytrace:send_message message: 641
So tid 0044 is trying to send message code 641 to 002f... but in case I understand everything correctly this should cause a PeekMessageW or GetMessageW for 002f, as defined in dlls/user32/message.c. However, no such call occurs... at least custom traces added to the top of both functions never occur in the log. The same goes for put_message_in_queue(...).
I found out that 002f is in dlls/ntdll/sync.c NTDLL_wait_for_multiple_objects(...) at this time which it processes down to ret = wait_reply( &cookie ); in the first loop iteration. I added some traces araound that call because looking at the log, what happens there seems quite strange to me:
002f:trace:mytrace:NTDLL_wait_for_multiple_objects before wait_reply [call to wait_reply happens here] 002e:trace:mytrace:NTDLL_wait_for_multiple_objects after wait_reply
Note the shift from 002f to 002e while still processing NTDLL_wait_for_multiple_objects(...). How can this happen / is that intended?