Adam Strzelecki wrote:
> Hi,
>
> In MSI dialog.c: msi_dialog_check_messages function it often happens
> that is sends:
> MsgWaitForMultipleObjects( 1, &handle, 0, INFINITE, QS_ALLINPUT );
> Where handle = NULL. I'm not sure if it is correct behavior. But
> tracing it down I found out that kernel32 and winex11 sync functions
> are not checking at all if the passes handles are not NULLs.
>
> So I'm not sure whether this patch is right or not, but I believe we
> shouldn't bother wineserver with NULL handles!?
> Yet maybe I don't understand clearly the way interserver communication
> works, and sending "WaitFor" with NULL handle makes sense. Does it?
No, but this is the wrong fix.
You're assuming that because MSI code does action A and that causes bad
effect when it does action B that the correct action is to fix B so that
it doesn't have a bad effect. However, the bug could also be that action
A shouldn't be done.
In this case, MSI should not be calling MsgWaitForMultipleObjects with
an invalid handle and in fact that barring memory corruption, this can't
happen:
> while (1)
> {
> msi_process_pending_messages( NULL );
>
> if( !handle )
> break;
>
> /*
> * block here until somebody creates a new dialog or
> * the handle we're waiting on becomes ready
> */
> r = MsgWaitForMultipleObjects( 1, &handle, 0, INFINITE,
> QS_ALLINPUT );
> if( r == WAIT_OBJECT_0 )
> break;
> }
--
Rob Shearman