Fix race condition in ConfigObject::SetAuthority

fixes #11784
This commit is contained in:
Gunnar Beutner 2016-05-12 14:00:19 +02:00
parent 01e58b463a
commit 57149ff899
1 changed files with 13 additions and 11 deletions

View File

@ -386,18 +386,18 @@ void ConfigObject::Activate(bool runtimeCreated)
{
CONTEXT("Activating object '" + GetName() + "' of type '" + GetType()->GetName() + "'");
Start(runtimeCreated);
ASSERT(GetStartCalled());
{
ObjectLock olock(this);
Start(runtimeCreated);
ASSERT(GetStartCalled());
ASSERT(!IsActive());
SetActive(true, true);
}
if (GetHAMode() == HARunEverywhere)
SetAuthority(true);
if (GetHAMode() == HARunEverywhere)
SetAuthority(true);
}
NotifyActive();
}
@ -422,12 +422,12 @@ void ConfigObject::Deactivate(bool runtimeRemoved)
return;
SetActive(false, true);
SetAuthority(false);
Stop(runtimeRemoved);
}
SetAuthority(false);
Stop(runtimeRemoved);
ASSERT(GetStopCalled());
NotifyActive();
@ -465,6 +465,8 @@ void ConfigObject::Resume(void)
void ConfigObject::SetAuthority(bool authority)
{
ObjectLock olock(this);
if (authority && GetPaused()) {
SetResumeCalled(false);
Resume();