Does wine send window messages without waiting apps to reenter userdll?
Javier Pimás
elpochodelagente at gmail.com
Tue Aug 25 15:09:47 CDT 2015
Hi! this is a very low-level technical question and my first one to this
list so please take with a grain of salt. I'm debugging a 32 bit app in
wine 1.6.2, on ubuntu 15.04 64 bits.
The app I'm debugging is a smalltalk vm, so it is very possessive with the
native stack, synchronization, callbacks and things like that. I'm having a
problem that happens in wine and not in windows, and the following thing I
describe might be the cause, it's very subtle.
The problem is related with non-queued messages, in a loop that calls
WaitMessage and does something more if there's a message. When running on
windows, WaitMessage blocks the thread until there's something (queued or
non-queued). If the message is non-queued, it is not immediately delivered
(adding frames to the stack by hand), but windows just awakes the thread
and waits it to reenter the OS (or userdll, I guess). I'm not sure if i can
trust wine to do the same, or if it awakes the process with a bunch of
frames pushed in the stack so that the non-queued message is delivered as
if WaitMessage never returned.
Here is a small idea of the subtle stack variations:
always in windows:
| VM Callback | <--- stack top
| WndProc context |
| .... |
| Next userdll call context | <- WaitMessage already returned
| VM Callout |
| .... |
------------------
never happens in windows (*i think*), possible in Wine?:
| VM Callback | <--- stack top
| WndProc context |
| .... |
| WaitMessage context | <--- never returned
| VM Callout |
| .... |
As I said, this is very low-level and subtle. Most apps wouldn't notice the
difference, but this is a VM. Is the second layout possible in wine?
Thanks for reading!
--
Javier Pimás
Ciudad de Buenos Aires
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20150825/bbdec4e4/attachment.html>
More information about the wine-devel
mailing list