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

Commit 6dcb8220 authored by Irina Dumitrescu's avatar Irina Dumitrescu Committed by android-build-merger
Browse files

Merge "Don't call ConnectivityService when holding ActivityManagerService lock." into qt-dev

am: 6c4094c6

Change-Id: Ibdaf0c403c790ba0020a83d7ed2be978d09c813e
parents 11c6dfd0 6c4094c6
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -1073,9 +1073,8 @@ public final class ActivityThread extends ClientTransactionHandler {
        }
        }


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


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


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

    @UnsupportedAppUsage
    @UnsupportedAppUsage
    public final void installSystemProviders(List<ProviderInfo> providers) {
    public final void installSystemProviders(List<ProviderInfo> providers) {
        if (providers != null) {
        if (providers != null) {
+2 −4
Original line number Original line Diff line number Diff line
@@ -1635,9 +1635,7 @@ public class ActivityManagerService extends IActivityManager.Stub
                }
                }
            } break;
            } break;
            case UPDATE_HTTP_PROXY_MSG: {
            case UPDATE_HTTP_PROXY_MSG: {
                synchronized (ActivityManagerService.this) {
                mProcessList.setAllHttpProxy();
                    mProcessList.setAllHttpProxyLocked();
                }
            } break;
            } break;
            case PROC_START_TIMEOUT_MSG: {
            case PROC_START_TIMEOUT_MSG: {
                ProcessRecord app = (ProcessRecord)msg.obj;
                ProcessRecord app = (ProcessRecord)msg.obj;
@@ -1826,7 +1824,7 @@ public class ActivityManagerService extends IActivityManager.Stub
            } break;
            } break;
            }
            }
        }
        }
    };
    }
    static final int COLLECT_PSS_BG_MSG = 1;
    static final int COLLECT_PSS_BG_MSG = 1;
+17 −12
Original line number Original line Diff line number Diff line
@@ -46,6 +46,7 @@ import static com.android.server.am.ActivityManagerService.TAG_PSS;
import static com.android.server.am.ActivityManagerService.TAG_UID_OBSERVERS;
import static com.android.server.am.ActivityManagerService.TAG_UID_OBSERVERS;


import android.app.ActivityManager;
import android.app.ActivityManager;
import android.app.ActivityThread;
import android.app.AppGlobals;
import android.app.AppGlobals;
import android.app.AppProtoEnums;
import android.app.AppProtoEnums;
import android.app.IApplicationThread;
import android.app.IApplicationThread;
@@ -2486,21 +2487,25 @@ public final class ProcessList {
        }
        }
    }
    }


    @GuardedBy("mService")
    void setAllHttpProxy() {
    void setAllHttpProxyLocked() {
        // Update the HTTP proxy for each application thread.
        synchronized (mService) {
            for (int i = mLruProcesses.size() - 1 ; i >= 0 ; i--) {
            for (int i = mLruProcesses.size() - 1 ; i >= 0 ; i--) {
                ProcessRecord r = mLruProcesses.get(i);
                ProcessRecord r = mLruProcesses.get(i);
            // Don't dispatch to isolated processes as they can't access
                // Don't dispatch to isolated processes as they can't access ConnectivityManager and
            // ConnectivityManager and don't have network privileges anyway.
                // don't have network privileges anyway. Exclude system server and update it
            if (r.thread != null && !r.isolated) {
                // separately outside the AMS lock, to avoid deadlock with Connectivity Service.
                if (r.pid != ActivityManagerService.MY_PID && r.thread != null && !r.isolated) {
                    try {
                    try {
                        r.thread.updateHttpProxy();
                        r.thread.updateHttpProxy();
                    } catch (RemoteException ex) {
                    } catch (RemoteException ex) {
                    Slog.w(TAG, "Failed to update http proxy for: " +
                        Slog.w(TAG, "Failed to update http proxy for: "
                            r.info.processName);
                                + r.info.processName);
                    }
                }
                }
            }
            }
        }
        }
        ActivityThread.updateHttpProxy(mService.mContext);
    }
    }


    @GuardedBy("mService")
    @GuardedBy("mService")