Commit 7d7f9a59 authored by Rob Shearman's avatar Rob Shearman Committed by Alexandre Julliard

ole32: Fix CoRevokeClassObject to return RPC_E_WRONG_THREAD if it was called…

ole32: Fix CoRevokeClassObject to return RPC_E_WRONG_THREAD if it was called from a different apartment than the one that called CoRegisterClassObject.
parent 23e43d88
......@@ -1809,9 +1809,17 @@ HRESULT WINAPI CoRevokeClassObject(
{
HRESULT hr = E_INVALIDARG;
RegisteredClass *curClass;
APARTMENT *apt;
TRACE("(%08x)\n",dwRegister);
apt = COM_CurrentApt();
if (!apt)
{
ERR("COM was not initialized\n");
return CO_E_NOTINITIALIZED;
}
EnterCriticalSection( &csRegisteredClassList );
LIST_FOR_EACH_ENTRY(curClass, &RegisteredClassList, RegisteredClass, entry)
......@@ -1821,8 +1829,17 @@ HRESULT WINAPI CoRevokeClassObject(
*/
if (curClass->dwCookie == dwRegister)
{
COM_RevokeRegisteredClassObject(curClass);
hr = S_OK;
if (curClass->apartment_id == apt->oxid)
{
COM_RevokeRegisteredClassObject(curClass);
hr = S_OK;
}
else
{
ERR("called from wrong apartment, should be called from %s\n",
wine_dbgstr_longlong(curClass->apartment_id));
hr = RPC_E_WRONG_THREAD;
}
break;
}
}
......
......@@ -847,7 +847,6 @@ static void test_registered_object_thread_affinity(void)
WaitForSingleObject(thread, INFINITE);
GetExitCodeThread(thread, &exitcode);
hr = exitcode;
todo_wine
ok(hr == RPC_E_WRONG_THREAD, "CoRevokeClassObject called from different "
"thread to where registered should return RPC_E_WRONG_THREAD instead of 0x%08x\n", hr);
......@@ -860,7 +859,6 @@ static void test_registered_object_thread_affinity(void)
"thread should return S_OK instead of 0x%08x\n", hr);
hr = CoRevokeClassObject(cookie);
todo_wine
ok_ole_success(hr, "CoRevokeClassObject");
CoUninitialize();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment