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

Commit 5b7bf299 authored by Irina Dumitrescu's avatar Irina Dumitrescu Committed by android-build-merger
Browse files

Merge "Don't call ConnectivityService when holding ActivityManagerService lock."

am: 31c89ed7

Change-Id: I6f371c32085d7e76cac1891b7ff5dbf3a5e8d415
parents 538193ab 31c89ed7
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -1003,9 +1003,8 @@ public final class ActivityThread extends ClientTransactionHandler {
        }

        public void updateHttpProxy() {
            final ConnectivityManager cm = ConnectivityManager.from(
            ActivityThread.updateHttpProxy(
                    getApplication() != null ? getApplication() : getSystemContext());
            Proxy.setHttpProxySystemProperty(cm.getDefaultProxy());
        }

        public void processInBackground() {
@@ -6690,6 +6689,11 @@ public final class ActivityThread extends ClientTransactionHandler {
        return thread;
    }

    public static void updateHttpProxy(@NonNull Context context) {
        final ConnectivityManager cm = ConnectivityManager.from(context);
        Proxy.setHttpProxySystemProperty(cm.getDefaultProxy());
    }

    @UnsupportedAppUsage
    public final void installSystemProviders(List<ProviderInfo> providers) {
        if (providers != null) {
+9 −6
Original line number Diff line number Diff line
@@ -318,7 +318,6 @@ import android.location.LocationManager;
import android.media.audiofx.AudioEffect;
import android.metrics.LogMaker;
import android.net.Proxy;
import android.net.ProxyInfo;
import android.net.Uri;
import android.os.BatteryStats;
import android.os.Binder;
@@ -2252,21 +2251,25 @@ public class ActivityManagerService extends IActivityManager.Stub
                }
            } break;
            case UPDATE_HTTP_PROXY_MSG: {
                // Update the HTTP proxy for each application thread.
                synchronized (ActivityManagerService.this) {
                    for (int i = mLruProcesses.size() - 1 ; i >= 0 ; i--) {
                        ProcessRecord r = mLruProcesses.get(i);
                        // Don't dispatch to isolated processes as they can't access
                        // ConnectivityManager and don't have network privileges anyway.
                        if (r.thread != null && !r.isolated) {
                        // ConnectivityManager and don't have network privileges anyway. Exclude
                        // system server and update it separately outside the AMS lock, to avoid
                        // deadlock with Connectivity Service.
                        if (r.pid != MY_PID && r.thread != null && !r.isolated) {
                            try {
                                r.thread.updateHttpProxy();
                            } catch (RemoteException ex) {
                                Slog.w(TAG, "Failed to update http proxy for: " +
                                        r.info.processName);
                                Slog.w(TAG, "Failed to update http proxy for: "
                                        + r.info.processName);
                            }
                        }
                    }
                }
                ActivityThread.updateHttpProxy(mContext);
            } break;
            case PROC_START_TIMEOUT_MSG: {
                ProcessRecord app = (ProcessRecord)msg.obj;
@@ -2607,7 +2610,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            } break;
            }
        }
    };
    }
    static final int COLLECT_PSS_BG_MSG = 1;