[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