Handle some edge cases

This commit is contained in:
Dennis Klein 2019-01-28 13:25:41 +01:00 committed by Dennis Klein
parent 66c01f2cda
commit d966a0a991

View File

@ -153,15 +153,21 @@ void waitMode(const string& waitForState,
StateSubscription stateSubscription(topologyPath, ddsCustomCmd); StateSubscription stateSubscription(topologyPath, ddsCustomCmd);
auto condition = [&] { auto condition = [&] {
return all_of(waitForStateMap.cbegin(), return !waitForStateMap.empty() // TODO once DDS provides an API to retrieve actual number of tasks, use it here
waitForStateMap.cend(), && all_of(waitForStateMap.cbegin(),
[&](WaitForStateMap::value_type i) { return i.second == waitForState; }); waitForStateMap.cend(),
[&](WaitForStateMap::value_type i) { return i.second == waitForState; });
}; };
unique_lock<mutex> lock(waitForStateMutex); unique_lock<mutex> lock(waitForStateMutex);
if (!waitForStateCV.wait_for(lock, timeout, condition)) {
throw runtime_error("timeout"); if (timeout > std::chrono::milliseconds(0)) {
}; if (!waitForStateCV.wait_for(lock, timeout, condition)) {
throw runtime_error("timeout");
}
} else {
waitForStateCV.wait(lock, condition);
}
} }
int main(int argc, char* argv[]) int main(int argc, char* argv[])