Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d29c3758 authored by Prashanth Swaminathan's avatar Prashanth Swaminathan
Browse files

Move ServiceConnector job timeouts to the job handler thread

Prior to this change, the response timeout was assigned via `orTimeout`
to the AndroidFuture, which has the default behavior of creating a
timeout task assigned to the main Looper (the application thread).
Callers that consumed the returned Future via a blocking call like
`Future.get()` would prevent the timeout from firing, leading to a block
in the main application thread.

This change explicitly sets the timeout handler to the job handler,
where the completion tasks of all jobs are handled.

Bug: 281589918
Test: Reproduced issue on aosp_cf_riscv64_phone (happens reliably due to
service bind failure) and confirmed that patch now successfully fires
the timeout and recovers.

Change-Id: Iee6736554904eaf59c22cdd252e0e1f8730b0643
parent f4c1b063
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -745,6 +745,10 @@ public interface ServiceConnector<I extends IInterface> {
            boolean mAsync = false;
            private String mDebugName;
            {
                // The timeout handler must be set before any calls to set timeouts on the
                // AndroidFuture, to ensure they are posted on the proper thread.
                setTimeoutHandler(getJobHandler());

                long requestTimeout = getRequestTimeoutMs();
                if (requestTimeout > 0) {
                    orTimeout(requestTimeout, TimeUnit.MILLISECONDS);