[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