]> err.no Git - varnish/commitdiff
When ditching sessions due to overflow, only ditch new sessions.
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 20 Sep 2006 09:00:20 +0000 (09:00 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 20 Sep 2006 09:00:20 +0000 (09:00 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@1100 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache_pool.c

index 11b9a3038701d710ea3b49ce685dd6c3791ca5de..410600cce5668a5ca1aceca55adf36908a9207dc 100644 (file)
@@ -295,7 +295,15 @@ WRK_QueueSession(struct sess *sp)
        UNLOCK(&qp->mtx);
 
        LOCK(&tmtx);
-       if ((VSL_stats->n_wrk_overflow >
+       /*
+        * If we have too much in the overflow, and this is a new session
+        * just drop it.  We do not drop sessions which were waiting for
+        * a busy object, they will be cheap to serve from here and the
+        * cleanup would be more complex to carry out than delivering
+        * the result will be
+        */
+       if (sp->obj == NULL &&
+           (VSL_stats->n_wrk_overflow >
            (params->wthread_max * params->overflow_max) / 100)) {
                VSL_stats->n_wrk_drop++;
                UNLOCK(&tmtx);