[OLE #98] Re: By-pass RPC Runtime If Possible When Calling An STA
Saulius Krasuckas
saulius2 at ar.fi.lt
Fri Jul 22 10:18:45 CDT 2005
* The log message from [1] says:
>
> By-pass the RPC runtime if possible when calling an STA by posting a
> message directly to the apartment window for it to process. Fixes a
> deadlock in InstallShield caused by having to create a thread when
> freeing an object that comes from an STA apartment. Added tests that
> fail without this fix.
After the change [2] running ole32 marshal test makes the process
unkillable on my winME. If I change the code, things get running OK:
| static DWORD CALLBACK no_couninitialize_client_proc(LPVOID p)
| {
| struct ncu_params *ncu_params = (struct ncu_params *)p;
| HRESULT hr;
| IUnknown *pProxy = NULL;
|
| pCoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
|
| hr = CoUnmarshalInterface(ncu_params->stream, &IID_IClassFactory, (void **)&pProxy);
| ok_ole_success(hr, CoUnmarshalInterface);
|
| ok_more_than_one_lock();
|
| /* die without calling CoUninitialize */
| + CoUninitialize();
|
| return 0;
| }
|
| /* tests STA -> STA call during DLL_THREAD_DETACH doesn't deadlock */
It seems call deadlocks only on my machine. Rob, can you tell me, please,
how can I find out, is there some problem with my box setup or is this a
bug in test-code?
[1] http://cvs.winehq.org/cvsweb/wine/dlls/ole32/tests/marshal.c
[2] http://cvs.winehq.org/cvsweb/wine/dlls/ole32/tests/marshal.c.diff?r1=1.24&r2=1.25
More information about the wine-devel
mailing list