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

Commit 6f71b42b authored by Oscar Montemayor's avatar Oscar Montemayor
Browse files

Fix for bug 2890320 Browser crashes, after adding bookmark.

Simplified locking scheme in Proxy's getProxy(..) method.
Also modified ContentObserver creation to be done from any thread.

Change-Id: I54edb56a86796f08a1310cf1ae1d1f0c42a0cbc8
parent e728ca93
Loading
Loading
Loading
Loading
+13 −23
Original line number Original line Diff line number Diff line
@@ -150,30 +150,14 @@ public final class Proxy {
                    // Return no proxy
                    // Return no proxy
                    retval = java.net.Proxy.NO_PROXY;
                    retval = java.net.Proxy.NO_PROXY;
                } else {
                } else {
                    java.net.Proxy retProxy =
                    retval =
                        new java.net.Proxy(java.net.Proxy.Type.HTTP, sGlobalProxySpec.proxyAddress);
                        new java.net.Proxy(java.net.Proxy.Type.HTTP, sGlobalProxySpec.proxyAddress);
                    sProxyInfoLock.readLock().unlock();
                    if (isLocalHost(url)) {
                        sProxyInfoLock.readLock().lock();
                        retval = java.net.Proxy.NO_PROXY;
                    } else {
                        sProxyInfoLock.readLock().lock();
                        retval = retProxy;
                    }
                }
                }
            } else {
            } else {
                // If network is WiFi, return no proxy.
                // If network is WiFi, return no proxy.
                // Otherwise, return the Mobile Operator proxy.
                // Otherwise, return the Mobile Operator proxy.
                if (!isNetworkWifi(ctx)) {
                if (!isNetworkWifi(ctx)) {
                    java.net.Proxy retProxy = getDefaultProxy(url);
                    retval = getDefaultProxy(url);
                    sProxyInfoLock.readLock().unlock();
                    if (isLocalHost(url)) {
                        sProxyInfoLock.readLock().lock();
                        retval = java.net.Proxy.NO_PROXY;
                    } else {
                        sProxyInfoLock.readLock().lock();
                        retval = retProxy;
                    }
                } else {
                } else {
                    retval = java.net.Proxy.NO_PROXY;
                    retval = java.net.Proxy.NO_PROXY;
                }
                }
@@ -181,6 +165,9 @@ public final class Proxy {
        } finally {
        } finally {
            sProxyInfoLock.readLock().unlock();
            sProxyInfoLock.readLock().unlock();
        }
        }
        if ((retval != java.net.Proxy.NO_PROXY) && (isLocalHost(url))) {
            retval = java.net.Proxy.NO_PROXY;
        }
        return retval;
        return retval;
    }
    }


@@ -348,7 +335,7 @@ public final class Proxy {
        private Context mContext;
        private Context mContext;


        SettingsObserver(Context ctx) {
        SettingsObserver(Context ctx) {
            super(new Handler());
            super(new Handler(ctx.getMainLooper()));
            mContext = ctx;
            mContext = ctx;
        }
        }


@@ -368,10 +355,13 @@ public final class Proxy {
        // No lock upgrading (from read to write) allowed
        // No lock upgrading (from read to write) allowed
        sProxyInfoLock.readLock().unlock();
        sProxyInfoLock.readLock().unlock();
        sProxyInfoLock.writeLock().lock();
        sProxyInfoLock.writeLock().lock();
        try {
            sGlobalProxyChangedObserver = new SettingsObserver(ctx);
            sGlobalProxyChangedObserver = new SettingsObserver(ctx);
        } finally {
            // Downgrading locks (from write to read) is allowed
            // Downgrading locks (from write to read) is allowed
            sProxyInfoLock.readLock().lock();
            sProxyInfoLock.readLock().lock();
            sProxyInfoLock.writeLock().unlock();
            sProxyInfoLock.writeLock().unlock();
        }
        ctx.getContentResolver().registerContentObserver(uriGlobalProxy, false,
        ctx.getContentResolver().registerContentObserver(uriGlobalProxy, false,
                sGlobalProxyChangedObserver);
                sGlobalProxyChangedObserver);
        ctx.getContentResolver().registerContentObserver(uriGlobalExclList, false,
        ctx.getContentResolver().registerContentObserver(uriGlobalExclList, false,