[QUARTZ] Some fixes
Robert Shearman
rob at codeweavers.com
Fri Dec 24 09:49:09 CST 2004
Christian Costa wrote:
> Robert Shearman wrote:
>
>> Christian Costa wrote:
>>
>>> Index: pin.c
>>> ===================================================================
>>> RCS file: /home/wine/wine/dlls/quartz/pin.c,v
>>> retrieving revision 1.9
>>> diff -u -r1.9 pin.c
>>> --- pin.c 16 Dec 2004 14:25:15 -0000 1.9
>>> +++ pin.c 24 Dec 2004 13:31:52 -0000
>>> @@ -1134,6 +1134,8 @@
>>> REFERENCE_TIME rtCurrent;
>>> ALLOCATOR_PROPERTIES allocProps;
>>>
>>> + CoInitialize(NULL);
>>> + SetEvent(This->hEventStateChanged);
>>>
>>> hr = IMemAllocator_GetProperties(This->pAlloc, &allocProps);
>>>
>>>
>>
>> Good catch, but it would probably be better to use
>> CoInitializeEx(NULL, COINIT_MULTITHREADED). This seems to be what
>> Microsoft uses for the pull thread.
>
>
> I was wondering about that but since I'm not very confident with this
> apartment stuff...
> I will try and see if it's still work.
The problem with using COINIT_APARTMENTHREADED (which is what you
effectively are using when you use the non-Ex version of the function)
is that it depends on using window messages when marshaling. The pull
thread does not have a message queue and does not dispatch messages,
therefore marshaled objects could hang when called. It is an unlikely
case (who would want to use marshaled objects in a performance sensitive
component), but you never know with these crazy Windows applications.
Rob
More information about the wine-devel
mailing list