From ace2c7017edeb221b293513497a9b7e4480bfcbd Mon Sep 17 00:00:00 2001 From: Dmitry Dementyev Date: Wed, 3 Jan 2024 09:26:56 -0800 Subject: [PATCH] Close AccountManagerService.session after timeout. Bug: 303905130 Bug: 316893159 Test: manual (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:bb53f192e0ceaa026a083da156ef0cb0140f0c09) Merged-In: Ib4cebf1750fc6324dc1c8853e0d716ea5e8ec073 Change-Id: Ib4cebf1750fc6324dc1c8853e0d716ea5e8ec073 Change-Id: I39afbe8f4bfc6b652365c798c64328797f27e5d4 --- .../android/server/accounts/AccountManagerService.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 126955add01a9..ecd642bebb669 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -180,6 +180,7 @@ public void onUnlockUser(int userHandle) { final MessageHandler mMessageHandler; + private static final int TIMEOUT_DELAY_MS = 1000 * 60 * 15; // Messages that can be sent on mHandler private static final int MESSAGE_TIMED_OUT = 3; private static final int MESSAGE_COPY_SHARED_ACCOUNT = 4; @@ -4172,6 +4173,7 @@ public Session(UserAccounts accounts, IAccountManagerResponse response, String a synchronized (mSessions) { mSessions.put(toString(), this); } + scheduleTimeout(); if (response != null) { try { response.asBinder().linkToDeath(this, 0 /* flags */); @@ -4279,6 +4281,11 @@ private void unbind() { } } + private void scheduleTimeout() { + mMessageHandler.sendMessageDelayed( + mMessageHandler.obtainMessage(MESSAGE_TIMED_OUT, this), TIMEOUT_DELAY_MS); + } + public void cancelTimeout() { mMessageHandler.removeMessages(MESSAGE_TIMED_OUT, this); } @@ -4315,6 +4322,9 @@ public void onServiceDisconnected(ComponentName name) { public void onTimedOut() { IAccountManagerResponse response = getResponseAndClose(); + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "Session.onTimedOut"); + } if (response != null) { try { response.onError(AccountManager.ERROR_CODE_REMOTE_EXCEPTION,