Without doing SES_Charge, the worker will panic at the end of
CNT_Session() when a request is aborted before it is complete.

Found by: Federico G. Schwindt <[email protected]>
---
 bin/varnishd/cache/cache_center.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/bin/varnishd/cache/cache_center.c 
b/bin/varnishd/cache/cache_center.c
index a9c233b..b03ba4b 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -139,10 +139,12 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req 
*req)
                        break;
                }
                if (i == -1) {
+                       SES_Charge(sp);
                        SES_Delete(sp, "EOF", now);
                        return (1);
                }
                if (i == -2) {
+                       SES_Charge(sp);
                        SES_Delete(sp, "overflow", now);
                        return (1);
                }
@@ -150,6 +152,7 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req 
*req)
                        /* Nothing but whitespace */
                        when = sp->t_idle + cache_param->timeout_idle;
                        if (when < now) {
+                               SES_Charge(sp);
                                SES_Delete(sp, "timeout", now);
                                return (1);
                        }
@@ -168,6 +171,7 @@ cnt_wait(struct sess *sp, struct worker *wrk, struct req 
*req)
                        when = sp->t_req + cache_param->timeout_req;
                        tmo = (int)(1e3 * (when - now));
                        if (when < now || tmo == 0) {
+                               SES_Charge(sp);
                                SES_Delete(sp, "req timeout", now);
                                return (1);
                        }
-- 
1.7.5.4


_______________________________________________
varnish-dev mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev

Reply via email to