From a9c4d8015b726b22bcea41860b8068bb6a51cdae Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Mon, 5 Dec 2022 23:57:40 +0000 Subject: libbinder*: Provide warning of library threadpool woes. Libraries messing with global threadpools = no no. Change-Id: I02ee0646c23fc13279b6cf2a0ffe181160bf73bb Bug: 260920753 Test: N/A --- libs/binder/include/binder/IPCThreadState.h | 2 ++ libs/binder/include/binder/ProcessState.h | 3 +++ libs/binder/ndk/include_platform/android/binder_process.h | 9 +++++++++ 3 files changed, 14 insertions(+) diff --git a/libs/binder/include/binder/IPCThreadState.h b/libs/binder/include/binder/IPCThreadState.h index 65b77c6736..d261c2143c 100644 --- a/libs/binder/include/binder/IPCThreadState.h +++ b/libs/binder/include/binder/IPCThreadState.h @@ -141,11 +141,13 @@ public: void restoreCallingIdentity(int64_t token); bool hasExplicitIdentity(); + // For main functions - dangerous for libraries to use status_t setupPolling(int* fd); status_t handlePolledCommands(); void flushCommands(); bool flushIfNeeded(); + // For main functions - dangerous for libraries to use void joinThreadPool(bool isMain = true); // Stop the local process. diff --git a/libs/binder/include/binder/ProcessState.h b/libs/binder/include/binder/ProcessState.h index 9679a5f477..87eee3d0f2 100644 --- a/libs/binder/include/binder/ProcessState.h +++ b/libs/binder/include/binder/ProcessState.h @@ -50,6 +50,7 @@ public: sp getContextObject(const sp& caller); + // For main functions - dangerous for libraries to use void startThreadPool(); bool becomeContextManager(); @@ -57,8 +58,10 @@ public: sp getStrongProxyForHandle(int32_t handle); void expungeHandle(int32_t handle, IBinder* binder); + // TODO: deprecate. void spawnPooledThread(bool isMain); + // For main functions - dangerous for libraries to use status_t setThreadPoolMaxThreadCount(size_t maxThreads); status_t enableOnewaySpamDetection(bool enable); void giveThreadPoolName(); diff --git a/libs/binder/ndk/include_platform/android/binder_process.h b/libs/binder/ndk/include_platform/android/binder_process.h index f408fadee0..89231295dd 100644 --- a/libs/binder/ndk/include_platform/android/binder_process.h +++ b/libs/binder/ndk/include_platform/android/binder_process.h @@ -28,17 +28,26 @@ __BEGIN_DECLS * * When using this, it is expected that ABinderProcess_setupPolling and * ABinderProcess_handlePolledCommands are not used. + * + * Do not use this from a library. Apps setup their own threadpools, and otherwise, the main + * function should be responsible for configuring the threadpool for the entire application. */ void ABinderProcess_startThreadPool(); /** * This sets the maximum number of threads that can be started in the threadpool. By default, after * startThreadPool is called, this is 15. If it is called additional times, it will only prevent * the kernel from starting new threads and will not delete already existing threads. + * + * Do not use this from a library. Apps setup their own threadpools, and otherwise, the main + * function should be responsible for configuring the threadpool for the entire application. */ bool ABinderProcess_setThreadPoolMaxThreadCount(uint32_t numThreads); /** * This adds the current thread to the threadpool. This may cause the threadpool to exceed the * maximum size. + * + * Do not use this from a library. Apps setup their own threadpools, and otherwise, the main + * function should be responsible for configuring the threadpool for the entire application. */ void ABinderProcess_joinThreadPool(); -- cgit v1.2.3-59-g8ed1b