From fc29e0b5829034d9c0a60882d2a21606b2f513b1 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Tue, 11 Nov 2014 12:55:44 +0100 Subject: [PATCH] Properly destroy TrustAgentWrapper when not bound Also fixes a potential issue where refreshing agents for a user that no longer exists would result in a crash. Bug: 18318629 Change-Id: I3589ea7e0f2e63fca02daeecf3ca964a8a8e4b3b --- .../core/java/com/android/server/trust/TrustAgentWrapper.java | 9 ++++----- .../core/java/com/android/server/trust/TrustManagerService.java | 9 +++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/trust/TrustAgentWrapper.java b/services/core/java/com/android/server/trust/TrustAgentWrapper.java index b2bcf7560756..4906bd194751 100644 --- a/services/core/java/com/android/server/trust/TrustAgentWrapper.java +++ b/services/core/java/com/android/server/trust/TrustAgentWrapper.java @@ -39,9 +39,7 @@ import android.util.Log; import android.util.Slog; import android.service.trust.ITrustAgentService; import android.service.trust.ITrustAgentServiceCallback; -import android.service.trust.TrustAgentService; -import java.util.ArrayList; import java.util.List; /** @@ -160,7 +158,7 @@ public class TrustAgentWrapper { mTrustManagerService.updateTrust(mUserId, false); break; case MSG_RESTART_TIMEOUT: - unbind(); + destroy(); mTrustManagerService.resetAgent(mName, mUserId); break; case MSG_SET_TRUST_AGENT_FEATURES_COMPLETED: @@ -367,7 +365,9 @@ public class TrustAgentWrapper { return mMessage; } - public void unbind() { + public void destroy() { + mHandler.removeMessages(MSG_RESTART_TIMEOUT); + if (!mBound) { return; } @@ -378,7 +378,6 @@ public class TrustAgentWrapper { mTrustAgentService = null; mSetTrustAgentFeaturesToken = null; mHandler.sendEmptyMessage(MSG_REVOKE_TRUST); - mHandler.removeMessages(MSG_RESTART_TIMEOUT); } public boolean isConnected() { diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java index fe5cb3381dbe..2388c854fae0 100644 --- a/services/core/java/com/android/server/trust/TrustManagerService.java +++ b/services/core/java/com/android/server/trust/TrustManagerService.java @@ -208,7 +208,8 @@ public class TrustManagerService extends SystemService { obsoleteAgents.addAll(mActiveAgents); for (UserInfo userInfo : userInfos) { - if (userInfo.partial || !userInfo.isEnabled() || userInfo.guestToRemove) continue; + if (userInfo == null || userInfo.partial || !userInfo.isEnabled() + || userInfo.guestToRemove) continue; if (!userInfo.supportsSwitchTo()) continue; if (!mActivityManager.isUserRunning(userInfo.id)) continue; if (lockPatternUtils.getKeyguardStoredPasswordQuality(userInfo.id) @@ -258,7 +259,7 @@ public class TrustManagerService extends SystemService { if (info.agent.isManagingTrust()) { trustMayHaveChanged = true; } - info.agent.unbind(); + info.agent.destroy(); mActiveAgents.remove(info); } } @@ -290,7 +291,7 @@ public class TrustManagerService extends SystemService { if (info.agent.isManagingTrust()) { trustMayHaveChanged = true; } - info.agent.unbind(); + info.agent.destroy(); mActiveAgents.removeAt(i); } } @@ -308,7 +309,7 @@ public class TrustManagerService extends SystemService { if (info.agent.isManagingTrust()) { trustMayHaveChanged = true; } - info.agent.unbind(); + info.agent.destroy(); mActiveAgents.removeAt(i); } } -- 2.11.0