* 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...
Saulius Krasuckas wrote:
- 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.
That test needs to be completely removed then. I'm surprised the Win9x implementation of COM differs so much from the WinNT version.
* On Mon, 25 Jul 2005, Robert Shearman wrote:
- Saulius Krasuckas wrote:
- 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.
That test needs to be completely removed then. I'm surprised the Win9x implementation of COM differs so much from the WinNT version.
Wait a minute. The funny thing is that the test didn't fail on Win95 and Win98 [3]! It does on *my* WinME. As I see no other WinME testers, I guess only my box' setup is at fault.
[3] http://test.winehq.org/data/200507211000/ http://test.winehq.org/data/200507221000/
* On Tue, 26 Jul 2005, Saulius Krasuckas wrote:
- On Mon, 25 Jul 2005, Robert Shearman wrote:
- Saulius Krasuckas wrote:
- 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.
That test needs to be completely removed then. I'm surprised the Win9x implementation of COM differs so much from the WinNT version.
The funny thing is that the test didn't fail on Win95 and Win98 [3]! It does on *my* WinME. As I see no other WinME testers, I guess only my box' setup is at fault.
I was right. This happens due to the program, called FreeWheel [4]. It sets system-wide hook and plays with messages related to mouse wheel and scrolling.
It comes with no src AFAIK, and the only way to "fix" this is to quit FreeWheel.exe before I run winetest*.exe, I guess.
[4] http://www.geocities.com/SiliconValley/2060/freewheel.html