Merge "bindeRpcBenchmark: rpc uses separate process"
diff --git a/libs/binder/tests/binderRpcBenchmark.cpp b/libs/binder/tests/binderRpcBenchmark.cpp
index 26a0b90..5f4a7b5 100644
--- a/libs/binder/tests/binderRpcBenchmark.cpp
+++ b/libs/binder/tests/binderRpcBenchmark.cpp
@@ -26,6 +26,7 @@
 
 #include <thread>
 
+#include <signal.h>
 #include <sys/prctl.h>
 #include <sys/types.h>
 #include <unistd.h>
@@ -154,6 +155,16 @@
     std::cerr << "\t\\" << Transport::KERNEL << " is KERNEL" << std::endl;
     std::cerr << "\t\\" << Transport::RPC << " is RPC" << std::endl;
 
+    if (0 == fork()) {
+        prctl(PR_SET_PDEATHSIG, SIGHUP); // racey, okay
+        sp<RpcServer> server = RpcServer::make();
+        server->setRootObject(sp<MyBinderRpcBenchmark>::make());
+        server->iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProduction();
+        CHECK(server->setupUnixDomainServer(addr.c_str()));
+        server->join();
+        exit(1);
+    }
+
 #ifdef __BIONIC__
     if (0 == fork()) {
         prctl(PR_SET_PDEATHSIG, SIGHUP); // racey, okay
@@ -161,6 +172,7 @@
                  defaultServiceManager()->addService(kKernelBinderInstance,
                                                      sp<MyBinderRpcBenchmark>::make()));
         IPCThreadState::self()->joinThreadPool();
+        exit(1);
     }
 
     ProcessState::self()->setThreadPoolMaxThreadCount(1);
@@ -170,14 +182,6 @@
     CHECK_NE(nullptr, gKernelBinder.get());
 #endif
 
-    std::thread([addr]() {
-        sp<RpcServer> server = RpcServer::make();
-        server->setRootObject(sp<MyBinderRpcBenchmark>::make());
-        server->iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProduction();
-        CHECK(server->setupUnixDomainServer(addr.c_str()));
-        server->join();
-    }).detach();
-
     for (size_t tries = 0; tries < 5; tries++) {
         usleep(10000);
         if (gSession->setupUnixDomainClient(addr.c_str())) goto success;