combase: When looking up an apartment which has a given creator thread ID use multi-threaded apartment only if the thread doesn't have an apartment-threaded one.
CoIncrementMTAUsage() always creates the MTA if it doesn't already exist, and mta->tid may accidently match the apt->tid of the apartment-threaded apartment of the thread. Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
251ab17af7
commit
b4da140357
|
@ -663,13 +663,20 @@ struct apartment * apartment_findfromtid(DWORD tid)
|
|||
EnterCriticalSection(&apt_cs);
|
||||
LIST_FOR_EACH_ENTRY(apt, &apts, struct apartment, entry)
|
||||
{
|
||||
if (apt->tid == tid)
|
||||
if (apt != mta && apt->tid == tid)
|
||||
{
|
||||
result = apt;
|
||||
apartment_addref(result);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!result && mta && mta->tid == tid)
|
||||
{
|
||||
result = mta;
|
||||
apartment_addref(result);
|
||||
}
|
||||
|
||||
LeaveCriticalSection(&apt_cs);
|
||||
|
||||
return result;
|
||||
|
|
Loading…
Reference in New Issue