<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><br>Issue:  <a href="https://www.varnish-cache.org/trac/ticket/1220">https://www.varnish-cache.org/trac/ticket/1220</a><br><br>The fix:  Move the call RES_StreamPoll after the testgzip, because the RES_StreamPoll may destroy the store during pass or hit_for_pass.<br><br><br><br>From 43459e5dd1acdc74f40efc3e507ee0035592fd54 Mon Sep 17 00:00:00 2001<br>From: ijammy <<a href="mailto:mzhang@yottaa.com">mzhang@yottaa.com</a>><br>Date: Mon, 12 Nov 2012 14:19:13 +0800<br>Subject: [PATCH] Move the call RES_StreamPoll after the testgzip, because the<br>stream poll may destroy the store during pass or<br>hit_for_pass<br><br>---<br>bin/varnishd/cache_gzip.c |    6 ++++--<br>1 file changed, 4 insertions(+), 2 deletions(-)<br><br>diff --git a/bin/varnishd/cache_gzip.c b/bin/varnishd/cache_gzip.c<br>index 07bdcac..165163b 100644<br>--- a/bin/varnishd/cache_gzip.c<br>+++ b/bin/varnishd/cache_gzip.c<br>@@ -647,8 +647,6 @@ vfp_testgzip_bytes(struct sess *sp, struct http_conn *htc, ssize_t bytes)<br><span class="Apple-tab-span" style="white-space: pre; ">       </span><span class="Apple-tab-span" style="white-space: pre; "> </span>VGZ_Ibuf(vg, st->ptr + st->len, w);<br><span class="Apple-tab-span" style="white-space: pre; ">      </span><span class="Apple-tab-span" style="white-space: pre; "> </span>st->len += w;<br><span class="Apple-tab-span" style="white-space: pre; ">       </span><span class="Apple-tab-span" style="white-space: pre; "> </span>sp->obj->len += w;<br>-<span class="Apple-tab-span" style="white-space: pre; ">      </span><span class="Apple-tab-span" style="white-space: pre; "> </span>if (sp->wrk->do_stream)<br>-<span class="Apple-tab-span" style="white-space: pre; "> </span><span class="Apple-tab-span" style="white-space: pre; "> </span><span class="Apple-tab-span" style="white-space: pre; "> </span>RES_StreamPoll(sp);<br><br><span class="Apple-tab-span" style="white-space: pre; ">  </span><span class="Apple-tab-span" style="white-space: pre; "> </span>while (!VGZ_IbufEmpty(vg)) {<br><span class="Apple-tab-span" style="white-space: pre; ">   </span><span class="Apple-tab-span" style="white-space: pre; "> </span><span class="Apple-tab-span" style="white-space: pre; "> </span>VGZ_Obuf(vg, obuf, sizeof obuf);<br>@@ -660,6 +658,10 @@ vfp_testgzip_bytes(struct sess *sp, struct http_conn *htc, ssize_t bytes)<br><span class="Apple-tab-span" style="white-space: pre; ">       </span><span class="Apple-tab-span" style="white-space: pre; "> </span><span class="Apple-tab-span" style="white-space: pre; "> </span><span class="Apple-tab-span" style="white-space: pre; "> </span>   "Invalid Gzip data", vg->vz.msg));<br><br><span class="Apple-tab-span" style="white-space: pre; ">    </span><span class="Apple-tab-span" style="white-space: pre; "> </span>}<br>+<br>+<span class="Apple-tab-span" style="white-space: pre; ">  </span><span class="Apple-tab-span" style="white-space: pre; "> </span>if (sp->wrk->do_stream)<br>+<span class="Apple-tab-span" style="white-space: pre; "> </span><span class="Apple-tab-span" style="white-space: pre; "> </span><span class="Apple-tab-span" style="white-space: pre; "> </span>RES_StreamPoll(sp);<br>+<br><span class="Apple-tab-span" style="white-space: pre; "> </span>}<br><span class="Apple-tab-span" style="white-space: pre; ">      </span>assert(i == VGZ_OK || i == VGZ_END);<br><span class="Apple-tab-span" style="white-space: pre; ">   </span>return (1);<br>-- <br>1.7.10.2 (Apple Git-33)<div><br></div><div></div></body></html>