From a962ca6700dee395289757e5c9bb9b0b2494c702 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Wed, 19 Feb 2020 21:23:07 -0800 Subject: [PATCH] UpdateEngine: fix cleanupAppliedPayload impl IUpdateEngine.cleanupSuccessfulUpdate is now asynchronous with a callback. Update UpdateEngine.cleanupAppliedPayload accordingly to use the new impl. Bug: 147696014 Test: apply OTA Change-Id: I9b308316dcb8e6a507063d3060fed7693da82a19 --- core/java/android/os/UpdateEngine.java | 35 +++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/core/java/android/os/UpdateEngine.java b/core/java/android/os/UpdateEngine.java index 223f92054f790..de274c082c807 100644 --- a/core/java/android/os/UpdateEngine.java +++ b/core/java/android/os/UpdateEngine.java @@ -559,6 +559,37 @@ public class UpdateEngine { } } + private static class CleanupAppliedPayloadCallback extends IUpdateEngineCallback.Stub { + private int mErrorCode = ErrorCodeConstants.ERROR; + private boolean mCompleted = false; + private Object mLock = new Object(); + private int getResult() { + synchronized (mLock) { + while (!mCompleted) { + try { + mLock.wait(); + } catch (InterruptedException ex) { + // do nothing, just wait again. + } + } + return mErrorCode; + } + } + + @Override + public void onStatusUpdate(int status, float percent) { + } + + @Override + public void onPayloadApplicationComplete(int errorCode) { + synchronized (mLock) { + mErrorCode = errorCode; + mCompleted = true; + mLock.notifyAll(); + } + } + } + /** * Cleanup files used by the previous update and free up space after the * device has been booted successfully into the new build. @@ -590,8 +621,10 @@ public class UpdateEngine { @WorkerThread @ErrorCode public int cleanupAppliedPayload() { + CleanupAppliedPayloadCallback callback = new CleanupAppliedPayloadCallback(); try { - return mUpdateEngine.cleanupSuccessfulUpdate(); + mUpdateEngine.cleanupSuccessfulUpdate(callback); + return callback.getResult(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); }