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

Commit dec64e74 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Don't obscure system_server crashes" into tm-dev

parents 9e16ca47 519fa369
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.server.location.geofence;
import static android.location.LocationManager.FUSED_PROVIDER;
import static android.location.LocationManager.KEY_PROXIMITY_ENTERING;

import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR;
import static com.android.server.location.LocationPermissions.PERMISSION_FINE;

import android.annotation.Nullable;
@@ -41,6 +40,7 @@ import android.stats.location.LocationStatsEnums;
import android.util.ArraySet;

import com.android.internal.annotations.GuardedBy;
import com.android.server.FgThread;
import com.android.server.PendingIntentUtils;
import com.android.server.location.LocationPermissions;
import com.android.server.location.injector.Injector;
@@ -396,7 +396,7 @@ public class GeofenceManager extends
    protected boolean registerWithService(LocationRequest locationRequest,
            Collection<GeofenceRegistration> registrations) {
        getLocationManager().requestLocationUpdates(FUSED_PROVIDER, locationRequest,
                DIRECT_EXECUTOR, this);
                FgThread.getExecutor(), this);
        return true;
    }

+56 −7
Original line number Diff line number Diff line
@@ -201,18 +201,54 @@ public class LocationProviderManager extends
        @Override
        public void deliverOnLocationChanged(LocationResult locationResult,
                @Nullable IRemoteCallback onCompleteCallback) throws RemoteException {
            try {
                mListener.onLocationChanged(locationResult.asList(), onCompleteCallback);
            } catch (RuntimeException e) {
                // the only way a runtime exception can be thrown here is if the client is in the
                // system server process (so that the binder call is executed directly, rather than
                // asynchronously in another process), and the client is using a direct executor (so
                // any client exceptions bubble directly back to us). we move any exception onto
                // another thread so that it can't cause further problems
                RuntimeException wrapper = new RuntimeException(e);
                FgThread.getExecutor().execute(() -> {
                    throw wrapper;
                });
            }
        }

        @Override
        public void deliverOnFlushComplete(int requestCode) throws RemoteException {
            try {
                mListener.onFlushComplete(requestCode);
            } catch (RuntimeException e) {
                // the only way a runtime exception can be thrown here is if the client is in the
                // system server process (so that the binder call is executed directly, rather than
                // asynchronously in another process), and the client is using a direct executor (so
                // any client exceptions bubble directly back to us). we move any exception onto
                // another thread so that it can't cause further problems
                RuntimeException wrapper = new RuntimeException(e);
                FgThread.getExecutor().execute(() -> {
                    throw wrapper;
                });
            }
        }

        @Override
        public void deliverOnProviderEnabledChanged(String provider, boolean enabled)
                throws RemoteException {
            try {
                mListener.onProviderEnabledChanged(provider, enabled);
            } catch (RuntimeException e) {
                // the only way a runtime exception can be thrown here is if the client is in the
                // system server process (so that the binder call is executed directly, rather than
                // asynchronously in another process), and the client is using a direct executor (so
                // any client exceptions bubble directly back to us). we move any exception onto
                // another thread so that it can't cause further problems
                RuntimeException wrapper = new RuntimeException(e);
                FgThread.getExecutor().execute(() -> {
                    throw wrapper;
                });
            }
        }
    }

@@ -294,11 +330,24 @@ public class LocationProviderManager extends
                throws RemoteException {
            // ILocationCallback doesn't currently support completion callbacks
            Preconditions.checkState(onCompleteCallback == null);

            try {
                if (locationResult != null) {
                    mCallback.onLocation(locationResult.getLastLocation());
                } else {
                    mCallback.onLocation(null);
                }
            } catch (RuntimeException e) {
                // the only way a runtime exception can be thrown here is if the client is in the
                // system server process (so that the binder call is executed directly, rather than
                // asynchronously in another process), and the client is using a direct executor (so
                // any client exceptions bubble directly back to us). we move any exception onto
                // another thread so that it can't cause further problems
                RuntimeException wrapper = new RuntimeException(e);
                FgThread.getExecutor().execute(() -> {
                    throw wrapper;
                });
            }
        }

        @Override