OSDN Git Service

Only spawn one binder thread for cmd.
authorMartijn Coenen <maco@google.com>
Thu, 11 May 2017 16:45:59 +0000 (09:45 -0700)
committerMartijn Coenen <maco@google.com>
Thu, 11 May 2017 17:28:42 +0000 (10:28 -0700)
To work around race conditions in libbinder when
spawning new threads while being shut down.

Bug: 36066697
Test: cmd still works
Change-Id: I71c8d1aac29a1bf65d54023a4ed39d943ad54c98

cmds/cmd/cmd.cpp

index 73d274f..7e05d72 100644 (file)
@@ -123,6 +123,13 @@ int main(int argc, char* const argv[])
 {
     signal(SIGPIPE, SIG_IGN);
     sp<ProcessState> proc = ProcessState::self();
+    // setThreadPoolMaxThreadCount(0) actually tells the kernel it's
+    // not allowed to spawn any additional threads, but we still spawn
+    // a binder thread from userspace when we call startThreadPool().
+    // This is safe because we only have 2 callbacks, neither of which
+    // block.
+    // See b/36066697 for rationale
+    proc->setThreadPoolMaxThreadCount(0);
     proc->startThreadPool();
 
     sp<IServiceManager> sm = defaultServiceManager();