Skip to content

Commit fa822fa

Browse files
committed
[launcher] Call CV notify all for clearing mLaunchInProgress
If remove outdated period, called during launch, it creates new thread and waits when current launch is finished. We should use notify all in order to wake up all the threads. Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
1 parent ab04dfd commit fa822fa

File tree

2 files changed

+28
-39
lines changed

2 files changed

+28
-39
lines changed

include/aos/sm/launcher.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,7 @@ class Launcher : public LauncherItf,
385385
Error GetEnvChangedInstances(Array<InstanceData>& instance) const;
386386
Error SendEnvChangedInstancesStatus(const Array<InstanceData>& instances);
387387
Error UpdateInstancesEnvVars();
388+
void FinishLaunch();
388389

389390
servicemanager::ServiceData* GetService(const String& serviceID)
390391
{

src/sm/launcher/launcher.cpp

+27-39
Original file line numberDiff line numberDiff line change
@@ -169,18 +169,15 @@ Error Launcher::RunInstances(const Array<ServiceInfo>& services, const Array<Lay
169169
LOG_ERR() << "Can't process instances: err=" << err;
170170
}
171171

172-
LockGuard lock {mMutex};
173-
174172
if (auto err = SendRunStatus(); !err.IsNone()) {
175173
LOG_ERR() << "Can't send run status: err=" << err;
176174
}
177175

178-
mLaunchInProgress = false;
179-
mCondVar.NotifyOne();
180-
181-
ShowResourceUsageStats();
176+
FinishLaunch();
182177
});
183178
if (!err.IsNone()) {
179+
FinishLaunch();
180+
184181
return AOS_ERROR_WRAP(err);
185182
}
186183

@@ -364,17 +361,10 @@ Error Launcher::RunLastInstances()
364361
LOG_ERR() << "Can't process last instances: err=" << err;
365362
}
366363

367-
LockGuard lock {mMutex};
368-
369-
mLaunchInProgress = false;
370-
mCondVar.NotifyOne();
371-
372-
ShowResourceUsageStats();
364+
FinishLaunch();
373365
});
374366
!err.IsNone()) {
375-
LockGuard lock {mMutex};
376-
377-
mLaunchInProgress = false;
367+
FinishLaunch();
378368

379369
return AOS_ERROR_WRAP(err);
380370
}
@@ -546,6 +536,8 @@ Error Launcher::SendRunStatus()
546536

547537
Error Launcher::SendOutdatedInstancesStatus(const Array<InstanceData>& instances)
548538
{
539+
LockGuard lock {mMutex};
540+
549541
auto status = MakeUnique<InstanceStatusStaticArray>(&mAllocator);
550542

551543
for (const auto& instance : instances) {
@@ -981,11 +973,7 @@ Error Launcher::StopCurrentInstances()
981973
mLaunchInProgress = true;
982974
}
983975

984-
auto finishLaunch = DeferRelease(&mLaunchInProgress, [this](bool*) {
985-
LockGuard lock {mMutex};
986-
987-
mLaunchInProgress = false;
988-
});
976+
auto finishLaunch = DeferRelease(&mLaunchInProgress, [this](bool*) { FinishLaunch(); });
989977

990978
auto stopInstances = MakeUnique<InstanceDataStaticArray>(&mAllocator);
991979

@@ -1034,7 +1022,9 @@ Error Launcher::HandleOfflineTTLs()
10341022
return ErrorEnum::eNone;
10351023
}
10361024

1037-
mCondVar.Wait(lock, [this] { return !mLaunchInProgress; });
1025+
if (auto err = mCondVar.Wait(lock, [this] { return !mLaunchInProgress; }); !err.IsNone()) {
1026+
return AOS_ERROR_WRAP(err);
1027+
}
10381028

10391029
outdatedInstances = MakeShared<InstanceDataStaticArray>(&mAllocator);
10401030

@@ -1056,21 +1046,14 @@ Error Launcher::HandleOfflineTTLs()
10561046
LOG_ERR() << "Can't process stop instances: err=" << err;
10571047
}
10581048

1059-
LockGuard lock {mMutex};
1060-
10611049
if (auto err = SendOutdatedInstancesStatus(*outdatedInstances); !err.IsNone()) {
10621050
LOG_ERR() << "Can't send outdated instances status: err=" << err;
10631051
}
10641052

1065-
mLaunchInProgress = false;
1066-
mCondVar.NotifyOne();
1067-
1068-
ShowResourceUsageStats();
1053+
FinishLaunch();
10691054
});
10701055
if (!err.IsNone()) {
1071-
LockGuard lock {mMutex};
1072-
1073-
mLaunchInProgress = false;
1056+
FinishLaunch();
10741057

10751058
return AOS_ERROR_WRAP(err);
10761059
}
@@ -1208,6 +1191,8 @@ Error Launcher::GetEnvChangedInstances(Array<InstanceData>& instances) const
12081191

12091192
Error Launcher::SendEnvChangedInstancesStatus(const Array<InstanceData>& instances)
12101193
{
1194+
LockGuard lock {mMutex};
1195+
12111196
auto status = MakeUnique<InstanceStatusStaticArray>(&mAllocator);
12121197

12131198
for (const auto& instanceData : instances) {
@@ -1279,26 +1264,29 @@ Error Launcher::UpdateInstancesEnvVars()
12791264
LOG_ERR() << "Can't process stop instances: err=" << err;
12801265
}
12811266

1282-
LockGuard lock {mMutex};
1283-
12841267
if (auto err = SendEnvChangedInstancesStatus(*restartInstances); !err.IsNone()) {
12851268
LOG_ERR() << "Can't send env changed instances status: err=" << err;
12861269
}
12871270

1288-
mLaunchInProgress = false;
1289-
mCondVar.NotifyOne();
1290-
1291-
ShowResourceUsageStats();
1271+
FinishLaunch();
12921272
});
12931273
if (!err.IsNone()) {
1294-
LockGuard lock {mMutex};
1295-
1296-
mLaunchInProgress = false;
1274+
FinishLaunch();
12971275

12981276
return AOS_ERROR_WRAP(err);
12991277
}
13001278

13011279
return ErrorEnum::eNone;
13021280
}
13031281

1282+
void Launcher::FinishLaunch()
1283+
{
1284+
LockGuard lock {mMutex};
1285+
1286+
mLaunchInProgress = false;
1287+
mCondVar.NotifyAll();
1288+
1289+
ShowResourceUsageStats();
1290+
}
1291+
13041292
} // namespace aos::sm::launcher

0 commit comments

Comments
 (0)