check for waitid and NOWAIT
authorMichael Wallner <mike@php.net>
Wed, 4 Nov 2020 14:21:17 +0000 (15:21 +0100)
committerMichael Wallner <mike@php.net>
Wed, 4 Nov 2020 14:21:17 +0000 (15:21 +0100)
test/CMakeLists.txt
test/conf.h.in
test/lib/Cluster.cpp

index 449223f0efd3fb62379cf48f7a8e5d24551e9733..4b10846628d18fd472be572b6a2e29e62c5df4dd 100644 (file)
@@ -14,6 +14,10 @@ endif()
 check_decl(pipe2 unistd.h)
 check_decl(SOCK_NONBLOCK sys/socket.h)
 check_decl(SOCK_CLOEXEC sys/socket.h)
+check_decl(waitid sys/wait.h)
+if(HAVE_WAITID)
+    check_compiles(HAVE_WAITID_NOWAIT "siginfo_t s; waitid(P_ALL, 0, &s, WNOWAIT|WEXITED);" sys/types.h sys/wait.h)
+endif()
 
 file(GLOB_RECURSE TESTING_SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
 set(TESTING_ROOT ${CMAKE_CURRENT_BINARY_DIR})
index 284d965310d073043efc3f1e9920899c3e99cac7..2d2d03601616ebea27c10f1cb0e51f06414dc428 100644 (file)
@@ -21,6 +21,7 @@
 #cmakedefine HAVE_SOCK_CLOEXEC 1
 #cmakedefine HAVE_EXECUTION 1
 #cmakedefine HAVE_TBB 1
+#cmakedefine HAVE_WAITID_NOWAIT 1
 
 #cmakedefine TESTING_ROOT "@TESTING_ROOT@"
 #cmakedefine MEMCACHED_BINARY getenv_else("MEMCACHED_BINARY", "@MEMCACHED_BINARY@")
index 37ec184e54d5f141ecd0c71b30b99e359d72f20d..de05a79769663e4801866c2c1d4ace41864233b8 100644 (file)
@@ -98,6 +98,7 @@ void Cluster::wait() {
   siginfo_t inf;
 
   while (!isStopped()) {
+#if HAVE_WAITID_NOWAIT
     if (waitid(P_ALL, 0, &inf, WEXITED | WNOWAIT)) {
       perror("Cluster::wait waitid()");
       return;
@@ -107,6 +108,9 @@ void Cluster::wait() {
     if (server != pids.end()) {
       server->second->wait();
     }
+#else
+    this_thread::sleep_for(100ms);
+#endif
   }
 }