The V8 Proxy Resolver eats up all memory after a while
Reported by
kaiw...@gmail.com,
Aug 19 2016
|
|||||||||||
Issue descriptionUserAgent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Example URL: Steps to reproduce the problem: 1. Launch chromium with "--proxy-pac-url=file:///the_directory/OmegaProfile__.pac" 2. Open the built-in Task Manager 3. Open mail.google.com, login 4. Wait a couple of minutes 5. See the burst of memory usage of V8 Proxy Resolver What is the expected behavior? The system is responsive as usual. What went wrong? The V8 Proxy Resolver eats up almost all memory of the system Did this work before? Yes Maybe Chrome 50 or 49 Chrome version: 52.0.2743.116 Channel: stable OS Version: Flash Version: Shockwave Flash 22.0 r0 Chrome on Windows also has this problem. This PAC file was generated by the plugin SwitchyOmega(https://github.com/FelisCatus/SwitchyOmega). I have modified it so that it can be tested without a proxy. In the past it can be workaround-ed by disabling chrome://flags/#v8-pac-mojo-out-of-process. But now it just leaks the Browser process according to the Task Manager. There is a few (Chinese) bug reports on the GitHub repository of this plugin: https://github.com/FelisCatus/SwitchyOmega/issues/797 https://github.com/FelisCatus/SwitchyOmega/issues/815 https://github.com/FelisCatus/SwitchyOmega/issues/819 https://github.com/FelisCatus/SwitchyOmega/issues/847 https://github.com/FelisCatus/SwitchyOmega/issues/851 https://github.com/FelisCatus/SwitchyOmega/issues/852
,
Aug 19 2016
Hrm....Don't see any obvious leaks in that PAC file. [+sammc, +eroman]: Any recent changes here? Do we still respect v8-pac-mojo-out-of-process?
,
Aug 21 2016
The developer of SwitchyOmega provided some update at https://github.com/FelisCatus/SwitchyOmega/issues/815 I observed that if I don't kill the resolver process when its CPU and memory consumption start to burst but wait a few minutes, the CPU consumption will drop to zero. The memory usage will drop a bit.
,
Aug 22 2016
A couple observations: * This regular expression is no longer going to work in Chrome, as path information is no longer revealed for https:// URLs ( crbug.com/593759 ): if (/^https:\/\/github\.com\/programthink\/zhao/.test(url)) return "+Go Proxy"; As far as performance/memory problems, my first guess would be it has to do with all the regular expressions. V8's regular expression can go O(n^2) in certain situations (mainly around bactracking), so executing it on large inputs like an unbounded URL can lead to really bad performance. At a first glance I didn't see any problematic regular expressions but something to keep in mind. Regular expressions also can use memory for their compiled cache, which could be contibuting memory usage. But even so for this amount of patterns I wouldn't expect to see a big problem. I also didn't see any obvious writes to global state which would be hurting memory usage. What I recommend to debug this further is to run this code directly in the browser, and use the Chrome Dev Tools to get a breakdown of memory usage. Roughly how that could be done is: * Add "alert(url)" to the original script. Run it through your test case (loading gmail.com) to get a list of all the inputs that are being run through the script (open about:net-internals and search for "alert" to find this and save it). * Run the .pac script on a regular web page. Feed it all the inputs gathered in the step above. Run with dev tools open and see where it shows the memory breakdown. (I won't have time to debug this right now, but will see if I can reproduce if I have a chance later.)
,
Aug 24 2016
I seem to find another way to reproduce the problem.
I wrote a HTML to run the .pac script as javascript(.js). And I try to call FindProxyForURL using:
FindProxyForURL("http://test.test/", "test.test");
hundreds of times in a cycle. Here are what I've found:
1. In my computer(Win10 Pro + Chrome 54.0.2832.2 dev-m (64-bit)), when the cycle times >= 395, It will lead to memery leak.
2. After the memery leak happens and after a while the memery begin to drop to normal and I try to run the cycle again without refresh, this time nothing will happen, even the cycle is more than one thousand times.
3. After I refresh the page to run again, the problem will appear again just like 1.
Here is what I use to do the test. You can input a number to set cycle times and then click "run"
,
Aug 24 2016
Many thanks to #c5 for your test case! I took a the attached heap snapshot when its memory consumption is above 800MB I set the loop count to 400.
,
Aug 24 2016
Can one of the Javascript folks take a look? Summary: relatively simple script taking up lots of memory before garbage collecting -- samples given in comments #5 and #6.
,
Aug 29 2016
CC'ing memory sheriff to take a look.
,
Sep 16 2016
This issue still persists in Chomium 53.0.2785.116 (32-bit, i686)
,
Nov 20 2016
also happens in windows Win7 SP1 64bit 54.0.2840.99 m (64-bit)
,
Jan 2 2017
still have this problem in debian: Debian version 8.5 Chrome Version 55.0.2883.75 (64-bit) width extension: Proxy SwitchyOmega 2.3.21 V8 Proxy Resolver eats up almost all memory
,
Jan 28 2017
I have a script with a cycle.
13231 iterations take 22 MB of RSS (resident set size).
13232 iterations take 1984 MB of RSS (resident set size).
Tested in NodeJS and in the page from comment #5.
Iterated function uses only booleans and `switch`es (no objects for GC to collect).
Returns no value (`undefined`).
The script is attached.
Here is terminal output from my PC (3GB RAM, Windows 10 Pro 64bit):
$ time node --expose-gc for-nodejs.js 13231
Node version: v7.4.0
{ rss: '22.208512MB',
heapTotal: '11.309056MB',
heapUsed: '6.394152MB',
external: '0.933663MB' }
Elapsed: 0.116s
real 0m0.383s
user 0m0.250s
sys 0m0.125s
$ time node --expose-gc for-nodejs.js 13232
Node version: v7.4.0
{ rss: '1984.483328MB',
heapTotal: '16.244736MB',
heapUsed: '11.017384MB',
external: '0.933663MB' }
Elapsed: 12.585s
real 0m19.772s
user 0m2.984s
sys 0m3.672s
,
Jan 28 2017
can you run with --trace-gc --trace-gc-verbose please?
,
Jan 29 2017
ok, here's what happens. the massive FindProxyForURL method gets compiled by Crankshaft which eats up between 2-3GB of memory before it bails out due to not enough virtual registers. Then Turbofan gets a go, and actually manages to optimize the method. After Crankshaft bailed out, the memory usage drops down for me to 26mb.
,
Jan 29 2017
seems the bug is that --noopt (which we pass on the PAC V8) stopped working...
,
Jan 30 2017
The following revision refers to this bug: https://chromium.googlesource.com/v8/v8.git/+/1fc5ca85fcc5bb75bd9b27eaf434f03cb5bf61fc commit 1fc5ca85fcc5bb75bd9b27eaf434f03cb5bf61fc Author: jochen <jochen@chromium.org> Date: Mon Jan 30 14:41:29 2017 Fix --noopt to not optimize BUG= v8:5904 , chromium:639217 R=mstarzinger@chromium.org Review-Url: https://codereview.chromium.org/2660103002 Cr-Commit-Position: refs/heads/master@{#42777} [modify] https://crrev.com/1fc5ca85fcc5bb75bd9b27eaf434f03cb5bf61fc/src/compilation-info.cc [modify] https://crrev.com/1fc5ca85fcc5bb75bd9b27eaf434f03cb5bf61fc/src/isolate.cc [modify] https://crrev.com/1fc5ca85fcc5bb75bd9b27eaf434f03cb5bf61fc/src/v8.cc [add] https://crrev.com/1fc5ca85fcc5bb75bd9b27eaf434f03cb5bf61fc/test/mjsunit/noopt.js
,
Jan 30 2017
,
Jan 30 2017
Thank you, jochen, very much for a quick fix. I kindly ask you and the team for merging it to Chromium 57, so proxy extensions (my own, SwitchyOmega and all alike) will be back in work in March of 2017
,
Jan 30 2017
,
Jan 31 2017
Your change meets the bar and is auto-approved for M57. Please go ahead and merge the CL to branch 2987 manually. Please contact milestone owner if you have questions. Owners: amineer@(clank), cmasso@(bling), ketakid@(cros), govind@(desktop) For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot
,
Jan 31 2017
Please merge your change to M57 branch 2987 ASAP (latest before 5:00 PM PT on Wednesday, 02/01/17) so we can pick it up for M57 Beta promotion release this week. Thank you.
,
Jan 31 2017
The following revision refers to this bug: https://chromium.googlesource.com/v8/v8.git/+/3f95e1f85b1d5196a3fe77283bd785c61058f57e commit 3f95e1f85b1d5196a3fe77283bd785c61058f57e Author: Jochen Eisinger <jochen@chromium.org> Date: Tue Jan 31 19:50:40 2017 Merged: Fix --noopt to not optimize Revision: 1fc5ca85fcc5bb75bd9b27eaf434f03cb5bf61fc BUG= chromium:639217 , v8:5904 LOG=N NOTRY=true NOPRESUBMIT=true NOTREECHECKS=true TBR=mstarzinger@chromium.org Review-Url: https://codereview.chromium.org/2662263003 . Cr-Commit-Position: refs/branch-heads/5.7@{#78} Cr-Branched-From: 975e9a320b6eaf9f12280c35df98e013beb8f041-refs/heads/5.7.492@{#1} Cr-Branched-From: 8d76f0e3465a84bbf0bceab114900fbe75844e1f-refs/heads/master@{#42426} [modify] https://crrev.com/3f95e1f85b1d5196a3fe77283bd785c61058f57e/src/compilation-info.cc [modify] https://crrev.com/3f95e1f85b1d5196a3fe77283bd785c61058f57e/src/isolate.cc [modify] https://crrev.com/3f95e1f85b1d5196a3fe77283bd785c61058f57e/src/v8.cc [add] https://crrev.com/3f95e1f85b1d5196a3fe77283bd785c61058f57e/test/mjsunit/noopt.js
,
Jan 31 2017
Per comment #25, this is already merged to M57. Hence, removing "Merge-Approved-57" label. Thank you.
,
Jul 10 2017
The screenshot was taken while using Chrome 59. Should I file a new issue?
,
Jul 10 2017
phistuck@, could you, please, provide a PAC-script and steps to reproduce?
,
Jul 10 2017
I opened Google Maps in incognito as well as in normal mode and I have many intranet tabs open, however I manually ended the process of most of them. I also have GMail, WhatsApp Web, Feedly and Outlook.com open and some heavy intranet IETab pages open.
No real steps to reproduce...
Anonymized PAC file -
function FindProxyForURL(url, host)
{
var lhost = host.toLowerCase();
host = lhost;
if (
isInNet(myIpAddress(), "0.0.0.0", "255.255.255.0")
)
return "DIRECT";
if (
shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
)
return "PROXY fooproxy.corp.com:8080";
if (
shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
)
return "PROXY fooproxy:8080";
if (
shExpMatch(host,"foo")
|| shExpMatch(url,"foo")
|| shExpMatch(host,"foo")
)
return "PROXY foo.corp.com:8080";
if (
shExpMatch(host,"*.msecnd.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
)
return "PROXY otherfooproxy.corp.com:8080";
else if (isPlainHostName(host)
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo*")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foop")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.fooa*")
|| shExpMatch(host,"*.fooa*")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foof*")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foov*")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.fool")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.fool")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*-foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foov")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foon")
|| shExpMatch(host,"fooa")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foot.*")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"*.foo")
|| shExpMatch(host,"foo")
|| shExpMatch(host,"foo")
)
return "DIRECT";
else
return "PROXY fooproxy.corp.com:8080";
}
,
Nov 26 2017
A few people still see this after 57 at https://github.com/FelisCatus/SwitchyOmega/issues/815#issuecomment-289283473 . |
|||||||||||
►
Sign in to add a comment |
|||||||||||
Comment 1 by kaiw...@gmail.com
, Aug 19 2016436 KB
436 KB Download