summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGrant Menke <grantmenke@google.com>2025-01-09 14:32:14 -0800
committeraoleary <seanm187@gmail.com>2025-07-08 20:45:51 +0000
commita4b0093c03c34c708969974ce53fbd093257006e (patch)
treea011318291f854cba3765af2cfee2f82e89dbad7 /src
parent5247990cb46c63c888f3af2317be9b517a6278cc (diff)
Ensure ScheduledExecutor is not shutdown before scheduling timeout cleanup.HEADt13.0
The scheduled executor in ConnectionServiceWrapper may be shutdown when calling createConference and createCall. This is infrequently causing a `RejectedExecutionException`. This CL adds a check that mScheduledExecutor is not shutdown before scheduling the cleanup. Flag: EXEMPT Security High/Critical Severity CVE Bug: 388588560 Test: manually using the provided apk + atest CallsManagerTest (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:dd63d318cf090ca2d458f772e2799614e6068006) (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:ef6f10655531a06d2814c3fad25eb7cd1e117581) (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:5f4dfa3ead83c0b1eb9999b0389468d28347d167) Merged-In: I0aaa0f7f57b8dd137403b6ceb7068e7c99652e1f Change-Id: I0aaa0f7f57b8dd137403b6ceb7068e7c99652e1f
Diffstat (limited to 'src')
-rwxr-xr-xsrc/com/android/server/telecom/ConnectionServiceWrapper.java41
1 files changed, 31 insertions, 10 deletions
diff --git a/src/com/android/server/telecom/ConnectionServiceWrapper.java b/src/com/android/server/telecom/ConnectionServiceWrapper.java
index d30216ac8..e7b84f188 100755
--- a/src/com/android/server/telecom/ConnectionServiceWrapper.java
+++ b/src/com/android/server/telecom/ConnectionServiceWrapper.java
@@ -66,6 +66,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
+import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@@ -1395,11 +1396,21 @@ public class ConnectionServiceWrapper extends ServiceBinder implements
}
}
};
- // Post cleanup to the executor service and cache the future, so we can cancel it if
- // needed.
- ScheduledFuture<?> future = mScheduledExecutor.schedule(r.getRunnableToCancel(),
- SERVICE_BINDING_TIMEOUT, TimeUnit.MILLISECONDS);
- mScheduledFutureMap.put(call, future);
+ if (mScheduledExecutor != null && !mScheduledExecutor.isShutdown()) {
+ try {
+ // Post cleanup to the executor service and cache the future,
+ // so we can cancel it if needed.
+ ScheduledFuture<?> future = mScheduledExecutor.schedule(
+ r.getRunnableToCancel(),SERVICE_BINDING_TIMEOUT,
+ TimeUnit.MILLISECONDS);
+ mScheduledFutureMap.put(call, future);
+ } catch (RejectedExecutionException e) {
+ Log.e(this, e, "createConference: mScheduledExecutor was "
+ + "already shutdown");
+ }
+ } else {
+ Log.w(this, "createConference: Scheduled executor is null or shutdown");
+ }
try {
mServiceInterface.createConference(
call.getConnectionManagerPhoneAccount(),
@@ -1516,11 +1527,21 @@ public class ConnectionServiceWrapper extends ServiceBinder implements
}
}
};
- // Post cleanup to the executor service and cache the future, so we can cancel it if
- // needed.
- ScheduledFuture<?> future = mScheduledExecutor.schedule(r.getRunnableToCancel(),
- SERVICE_BINDING_TIMEOUT, TimeUnit.MILLISECONDS);
- mScheduledFutureMap.put(call, future);
+ if (mScheduledExecutor != null && !mScheduledExecutor.isShutdown()) {
+ try {
+ // Post cleanup to the executor service and cache the future,
+ // so we can cancel it if needed.
+ ScheduledFuture<?> future = mScheduledExecutor.schedule(
+ r.getRunnableToCancel(),SERVICE_BINDING_TIMEOUT,
+ TimeUnit.MILLISECONDS);
+ mScheduledFutureMap.put(call, future);
+ } catch (RejectedExecutionException e) {
+ Log.e(this, e, "createConnection: mScheduledExecutor was "
+ + "already shutdown");
+ }
+ } else {
+ Log.w(this, "createConnection: Scheduled executor is null or shutdown");
+ }
try {
mServiceInterface.createConnection(
call.getConnectionManagerPhoneAccount(),