libbinder: ProcessState warn on forked
Reasonably common error, when people's programs are crashing, because
libbinder does not support forking (and supporting forking is really
complicated and error prone in multithreaded processes:
pthread_atfork documentation states this
The intent of pthread_atfork() was to provide a mechanism
whereby the application (or a library) could ensure that
mutexes and other process and thread state would be restored
to a consistent state. In practice, this task is generally
too difficult to be practicable.
specifically, in libbinder, we would have to:
- get all of the libbinder-related locks
- make sure the kernel driver can handle forking (or open a new
binder fd by reinstantiating ProcessState)
- (actual difficulty here) make sure we can capture and release
application-specific locks - in a multithreaded process,
anything could be going on
So, we don't want to take on the complexity of supporting it).
Instead now, we install a pthread_atfork handler which marks the
ProcessState as invalid in the child process. If code tries to access
ProcessState after forking, then it will throw an error (future: abort).
Note: forking and then using non-binder things, such as what installd
and vold does, is okay.
Bug: 202289725
Test: boot and check logs (none)
Change-Id: I18638a3190ed2ea23945413c2e5ab15d7094d0b0
2 files changed