diff options
| author | 2022-05-18 22:04:49 +0000 | |
|---|---|---|
| committer | 2022-05-20 16:09:50 +0000 | |
| commit | df732baf74ca36d50e60c31179e6364d8fd4aa06 (patch) | |
| tree | 1ef05275d5ca6cb713e085554cb8dc1195d1fa80 | |
| parent | 97c1356a08376bd1664a0ce5be5591fe9c91c7d6 (diff) | |
libbinder: O_CLOFORK
You can't use binder after forking, so we can drop the FD. The binder
driver doesn't support this (once the FD is open, we would need to
open a new context in the child process). So, the userspace API would
need to handle resetting all state. However, in general, handling this
for multi-threaded processes (because of needing to take all locks by
all libraries used by all threads and restoring state, etc...) is too
complicated to make work in Android.
Bug: 232904068
Test: binderLibTest
Change-Id: I38c354af2c69804a40dc2774086a9ab77d158ede
| -rw-r--r-- | libs/binder/ProcessState.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/libs/binder/ProcessState.cpp b/libs/binder/ProcessState.cpp index 68958e655a..433885d5b0 100644 --- a/libs/binder/ProcessState.cpp +++ b/libs/binder/ProcessState.cpp @@ -175,6 +175,10 @@ void ProcessState::childPostFork() { // the thread handler is installed if (gProcess) { gProcess->mForked = true; + + // "O_CLOFORK" + close(gProcess->mDriverFD); + gProcess->mDriverFD = -1; } gProcessMutex.unlock(); } |