-bool Cluster::isListening() {
- for (auto &server : cluster) {
- Retry server_is_listening{[&] {
- if (!server.isListening()) {
- // zombie?
- auto old_pid = server.getPid();
- if (server.tryWait()) {
- cerr << "Collected zombie " << server << "(old pid=" << old_pid << ")\n";
- pids.erase(old_pid);
- // restart
- startServer(server);
- }
- if (!server.isListening()) {
- return false;
- }
- }
- return true;
- }};
- if (!server_is_listening()) {
- return false;
- }
- }
-
- return true;
+bool Cluster::isListening() const {
+ return all_of(
+#if HAVE_EXECUTION && HAVE_TBB
+ execution::par,
+#endif
+ cluster.begin(), cluster.end(), [](const Server &s) {
+ return s.isListening();
+ });