mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-01 22:04:04 +00:00
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);
|
EnterCriticalSection(&apt_cs);
|
||||||
LIST_FOR_EACH_ENTRY(apt, &apts, struct apartment, entry)
|
LIST_FOR_EACH_ENTRY(apt, &apts, struct apartment, entry)
|
||||||
{
|
{
|
||||||
if (apt->tid == tid)
|
if (apt != mta && apt->tid == tid)
|
||||||
{
|
{
|
||||||
result = apt;
|
result = apt;
|
||||||
apartment_addref(result);
|
apartment_addref(result);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!result && mta && mta->tid == tid)
|
||||||
|
{
|
||||||
|
result = mta;
|
||||||
|
apartment_addref(result);
|
||||||
|
}
|
||||||
|
|
||||||
LeaveCriticalSection(&apt_cs);
|
LeaveCriticalSection(&apt_cs);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
Loading…
Reference in a new issue