Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bb0d4256 authored by Benedict Wong's avatar Benedict Wong Committed by Gerrit Code Review
Browse files

Merge "Fix potential for dead binders when calling callbacks"

parents 5d4effbd 5a7e3797
Loading
Loading
Loading
Loading
+25 −10
Original line number Diff line number Diff line
@@ -539,7 +539,13 @@ public class VcnManagementService extends IVcnManagementService.Stub {
    @GuardedBy("mLock")
    private void notifyAllPolicyListenersLocked() {
        for (final PolicyListenerBinderDeath policyListener : mRegisteredPolicyListeners.values()) {
            Binder.withCleanCallingIdentity(() -> policyListener.mListener.onPolicyChanged());
            Binder.withCleanCallingIdentity(() -> {
                try {
                    policyListener.mListener.onPolicyChanged();
                } catch (RemoteException e) {
                    logDbg("VcnStatusCallback threw on VCN status change", e);
                }
            });
        }
    }

@@ -548,8 +554,13 @@ public class VcnManagementService extends IVcnManagementService.Stub {
            @NonNull ParcelUuid subGroup, @VcnStatusCode int statusCode) {
        for (final VcnStatusCallbackInfo cbInfo : mRegisteredStatusCallbacks.values()) {
            if (isCallbackPermissioned(cbInfo, subGroup)) {
                Binder.withCleanCallingIdentity(
                        () -> cbInfo.mCallback.onVcnStatusChanged(statusCode));
                Binder.withCleanCallingIdentity(() -> {
                    try {
                        cbInfo.mCallback.onVcnStatusChanged(statusCode);
                    } catch (RemoteException e) {
                        logDbg("VcnStatusCallback threw on VCN status change", e);
                    }
                });
            }
        }
    }
@@ -1222,13 +1233,17 @@ public class VcnManagementService extends IVcnManagementService.Stub {
                // Notify all registered StatusCallbacks for this subGroup
                for (VcnStatusCallbackInfo cbInfo : mRegisteredStatusCallbacks.values()) {
                    if (isCallbackPermissioned(cbInfo, mSubGroup)) {
                        Binder.withCleanCallingIdentity(
                                () ->
                        Binder.withCleanCallingIdentity(() -> {
                            try {
                                cbInfo.mCallback.onGatewayConnectionError(
                                        gatewayConnectionName,
                                        errorCode,
                                        exceptionClass,
                                                exceptionMessage));
                                        exceptionMessage);
                            } catch (RemoteException e) {
                                logDbg("VcnStatusCallback threw on VCN status change", e);
                            }
                        });
                    }
                }
            }