libbinder: RPC process oneway w/ 'tail call'
When draining oneway commands (which must be serialized), we do a
recursive call to process a transaction. However, this wouldn't even be
considered to be a tailcall because of the complex destructors which
need to run. So, instead we work around this w/ goto to the beginning of
the function.
The alternative here (to a 'goto') to consider is creating a more
complex return type to processTransactInternal which would convince
processTransact to re-issue the command. Though, this would be a
somewhat larger refactor.
Fixes: 190638569
Test: binderRpcTest (OnewayStressTest repeatedly on device doesn't fail
for several minutes - failed without this)
Change-Id: I9fbc75941452348e498849d5d59130487ef6cc44
diff --git a/libs/binder/RpcState.h b/libs/binder/RpcState.h
index 13c3115..db142a1 100644
--- a/libs/binder/RpcState.h
+++ b/libs/binder/RpcState.h
@@ -144,8 +144,7 @@
const RpcWireHeader& command);
[[nodiscard]] status_t processTransactInternal(const base::unique_fd& fd,
const sp<RpcSession>& session,
- CommandData transactionData,
- sp<IBinder>&& targetRef);
+ CommandData transactionData);
[[nodiscard]] status_t processDecStrong(const base::unique_fd& fd,
const sp<RpcSession>& session,
const RpcWireHeader& command);