summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dmitri Plotnikov <dplotnikov@google.com> 2023-08-21 10:04:34 -0700
committer Dmitri Plotnikov <dplotnikov@google.com> 2023-08-21 10:05:05 -0700
commit035db0586be28c527c91b057290e57bbc0283038 (patch)
treec46a3b1f81218c85611a8dc5ab5269ed3456af28
parent1fc9dac6f433142f59017e087209cd3f286c4495 (diff)
Catch RejectedExecutionException in BatteryExternalStatsWorker
Bug: 296805223 Test: monitor crash cluster 1030343958128424937 Change-Id: I58361832dd50ca7e67cddc4b578ba46adcb9407c
-rw-r--r--services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java42
1 files changed, 27 insertions, 15 deletions
diff --git a/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java b/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java
index daf02ca81a10..f9d57e4c9042 100644
--- a/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java
+++ b/services/core/java/com/android/server/power/stats/BatteryExternalStatsWorker.java
@@ -342,20 +342,24 @@ public class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStat
@Override
public Future<?> scheduleCleanupDueToRemovedUser(int userId) {
synchronized (BatteryExternalStatsWorker.this) {
- // Initial quick clean-up after a user removal
- mExecutorService.schedule(() -> {
- synchronized (mStats) {
- mStats.clearRemovedUserUidsLocked(userId);
- }
- }, UID_QUICK_REMOVAL_AFTER_USER_REMOVAL_DELAY_MILLIS, TimeUnit.MILLISECONDS);
+ try {
+ // Initial quick clean-up after a user removal
+ mExecutorService.schedule(() -> {
+ synchronized (mStats) {
+ mStats.clearRemovedUserUidsLocked(userId);
+ }
+ }, UID_QUICK_REMOVAL_AFTER_USER_REMOVAL_DELAY_MILLIS, TimeUnit.MILLISECONDS);
- // Final clean-up after a user removal, to take care of UIDs that were running longer
- // than expected
- return mExecutorService.schedule(() -> {
- synchronized (mStats) {
- mStats.clearRemovedUserUidsLocked(userId);
- }
- }, UID_FINAL_REMOVAL_AFTER_USER_REMOVAL_DELAY_MILLIS, TimeUnit.MILLISECONDS);
+ // Final clean-up after a user removal, to take care of UIDs that were running
+ // longer than expected
+ return mExecutorService.schedule(() -> {
+ synchronized (mStats) {
+ mStats.clearRemovedUserUidsLocked(userId);
+ }
+ }, UID_FINAL_REMOVAL_AFTER_USER_REMOVAL_DELAY_MILLIS, TimeUnit.MILLISECONDS);
+ } catch (RejectedExecutionException e) {
+ return CompletableFuture.failedFuture(e);
+ }
}
}
@@ -401,7 +405,11 @@ public class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStat
scheduleSyncLocked("write", UPDATE_ALL);
// Since we use a single threaded executor, we can assume the next scheduled task's
// Future finishes after the sync.
- return mExecutorService.submit(mWriteTask);
+ try {
+ return mExecutorService.submit(mWriteTask);
+ } catch (RejectedExecutionException e) {
+ return CompletableFuture.failedFuture(e);
+ }
}
/**
@@ -429,7 +437,11 @@ public class BatteryExternalStatsWorker implements BatteryStatsImpl.ExternalStat
if (mCurrentFuture == null) {
mUpdateFlags = flags;
mCurrentReason = reason;
- mCurrentFuture = mExecutorService.submit(mSyncTask);
+ try {
+ mCurrentFuture = mExecutorService.submit(mSyncTask);
+ } catch (RejectedExecutionException e) {
+ return CompletableFuture.failedFuture(e);
+ }
}
mUpdateFlags |= flags;
return mCurrentFuture;