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);
auto condition = [&] {
return all_of(waitForStateMap.cbegin(),
waitForStateMap.cend(),
[&](WaitForStateMap::value_type i) { return i.second == waitForState; });
return !waitForStateMap.empty() // TODO once DDS provides an API to retrieve actual number of tasks, use it here
&& all_of(waitForStateMap.cbegin(),
waitForStateMap.cend(),
[&](WaitForStateMap::value_type i) { return i.second == waitForState; });
};
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[])