From 0d2bc8a574bf8135d78ed6c2066b74f13b601765 Mon Sep 17 00:00:00 2001 From: Trung Lam Date: Mon, 9 Nov 2020 08:06:17 +0000 Subject: Fix issue with saving protos to disk during shutdown. Test: Built and tested on device. Bug: 172789268 Change-Id: I9cb65e7560f92387e92234929a0b7881f84d7b8f --- .../people/data/AbstractProtoDiskReadWriter.java | 25 +++++++++++----------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/services/people/java/com/android/server/people/data/AbstractProtoDiskReadWriter.java b/services/people/java/com/android/server/people/data/AbstractProtoDiskReadWriter.java index 7672cd0040ec..05e9cede5489 100644 --- a/services/people/java/com/android/server/people/data/AbstractProtoDiskReadWriter.java +++ b/services/people/java/com/android/server/people/data/AbstractProtoDiskReadWriter.java @@ -185,22 +185,23 @@ abstract class AbstractProtoDiskReadWriter { * is useful for when device is powering off. */ @MainThread - synchronized void saveImmediately(@NonNull String fileName, @NonNull T data) { - mScheduledFileDataMap.put(fileName, data); + void saveImmediately(@NonNull String fileName, @NonNull T data) { + synchronized (this) { + mScheduledFileDataMap.put(fileName, data); + } triggerScheduledFlushEarly(); } @MainThread - private synchronized void triggerScheduledFlushEarly() { - if (mScheduledFileDataMap.isEmpty() || mScheduledExecutorService.isShutdown()) { - return; - } - // Cancel existing future. - if (mScheduledFuture != null) { - - // We shouldn't need to interrupt as this method and threaded task - // #flushScheduledData are both synchronized. - mScheduledFuture.cancel(true); + private void triggerScheduledFlushEarly() { + synchronized (this) { + if (mScheduledFileDataMap.isEmpty() || mScheduledExecutorService.isShutdown()) { + return; + } + // Cancel existing future. + if (mScheduledFuture != null) { + mScheduledFuture.cancel(true); + } } // Submit flush and blocks until it completes. Blocking will prevent the device from -- cgit v1.2.3-59-g8ed1b