[QUARTZ] Some fixes

Christian Costa titan.costa at wanadoo.fr
Fri Dec 24 11:36:27 CST 2004


Robert Shearman wrote:

> 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
>
>
>
Thanks for the explanation, Rob.
I've just try and it still works fine with the change.

Bye,
Christian






More information about the wine-devel mailing list