diff options
| author | 2023-08-21 10:04:34 -0700 | |
|---|---|---|
| committer | 2023-08-21 10:05:05 -0700 | |
| commit | 035db0586be28c527c91b057290e57bbc0283038 (patch) | |
| tree | c46a3b1f81218c85611a8dc5ab5269ed3456af28 | |
| parent | 1fc9dac6f433142f59017e087209cd3f286c4495 (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.java | 42 |
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; |