From a89a52d6a3c42bfc8a023e0d9b021c0b87683bab Mon Sep 17 00:00:00 2001 From: Kensuke Miyagi Date: Fri, 3 Dec 2021 07:34:45 -0800 Subject: [PATCH] Reclaim sharee's resource upon owner's close() Also convert the unsupported exception across process to simply returning error for requestFrontend. Bug: 206726672 Test: android.media.tv.tuner.cts.TunerTest#testClose() Change-Id: I13c4b9438bcbd1382f923939d25e7cf2070a617c --- .../TunerResourceManagerService.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java index 6628802ea9db5..e508260746da7 100644 --- a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java +++ b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java @@ -243,21 +243,24 @@ public class TunerResourceManagerService extends SystemService implements IBinde @Override public boolean requestFrontend(@NonNull TunerFrontendRequest request, - @NonNull int[] frontendHandle) throws RemoteException { + @NonNull int[] frontendHandle) { enforceTunerAccessPermission("requestFrontend"); enforceTrmAccessPermission("requestFrontend"); if (frontendHandle == null) { - throw new RemoteException("frontendHandle can't be null"); + Slog.e(TAG, "frontendHandle can't be null"); + return false; } synchronized (mLock) { if (!checkClientExists(request.clientId)) { - throw new RemoteException("Request frontend from unregistered client: " + Slog.e(TAG, "Request frontend from unregistered client: " + request.clientId); + return false; } // If the request client is holding or sharing a frontend, throw an exception. if (!getClientProfile(request.clientId).getInUseFrontendHandles().isEmpty()) { - throw new RemoteException("Release frontend before requesting another one. " - + "Client id: " + request.clientId); + Slog.e(TAG, "Release frontend before requesting another one. Client id: " + + request.clientId); + return false; } return requestFrontendInternal(request, frontendHandle); } @@ -1153,7 +1156,8 @@ public class TunerResourceManagerService extends SystemService implements IBinde ClientProfile ownerClient = getClientProfile(fe.getOwnerClientId()); if (ownerClient != null) { for (int shareOwnerId : ownerClient.getShareFeClientIds()) { - clearFrontendAndClientMapping(getClientProfile(shareOwnerId)); + reclaimResource(shareOwnerId, + TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND); } } }