fre 2012-11-30 klockan 15:38 -0700 skrev Alex Rousskov: > On 11/30/2012 02:25 PM, Henrik Nordström wrote: > > > We should look into why it is at all needed. From what I can understand > > it should not be needed. > > Agreed. Please do that if you can.
Found it. The event loop gets saturated with timed events during the rebuild and never exectues comm events. There is a little premature optimization there skipping the primary engine while checking all others, causing comm to starve to death. Fixed by this change. I think it's correct but review please. diff -ru squid-3.2.3/src/EventLoop.cc squid-3.2.3-dpl/src/EventLoop.cc --- squid-3.2.3/src/EventLoop.cc 2012-10-20 15:39:49.000000000 +0300 +++ squid-3.2.3-dpl/src/EventLoop.cc 2012-12-03 01:52:25.381523614 +0200 @@ -111,7 +111,6 @@ // generate calls and events typedef engine_vector::iterator EVI; for (EVI i = engines.begin(); i != engines.end(); ++i) { - if (*i != waitingEngine) - checkEngine(*i, false); + checkEngine(*i, false); } With this * original timeouts works fine * rebuild is now done in background as expected Unfortunately it uncovered another minor bug resulting in 100% CPU usage. Fixed by this: diff -ru --exclude helpers --exclude tools squid-3.2.3/src/comm.cc squid-3.2.3-dpl/src/comm.cc --- squid-3.2.3/src/comm.cc 2012-10-20 15:39:49.000000000 +0300 +++ squid-3.2.3-dpl/src/comm.cc 2012-12-03 02:59:34.713503938 +0200 @@ -2071,7 +2071,7 @@ case COMM_OK: case COMM_TIMEOUT: - return 0; + return EVENT_IDLE; case COMM_IDLE: Also in testing this I observed that fast ACLs do not do inverse of last rule on no match. Excplicit allow/deny all rule is needed. Don't think this is intentional. Regards Henrik