Don't throw TransactionTooLargeException for small payloads
In practice, if we ever see an apparent transaction-too-large result
with a modest-sized payload, it means that the remote process died at
just the right time (with the binder transaction already in flight
so it wasn't detected as a DEAD_OBJECT up front). Don't throw
TransactionTooLargeException in this case, because we really do need
to distinguish that from dead-remote more accurately.
In particular, certain common execution patterns on existing hardware
trigger this circumstance, and they wind up crashing the system.
This is bad, so now we avoid it unless we're pretty sure that is
really what happened.
1 file changed