* 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&am...