[4.0] 95dd968 Don't assert on multiple End records seen in a record set.

Martin Blix Grydeland martin at varnish-software.com
Thu Mar 13 10:24:29 CET 2014


commit 95dd9683ab3d4c4bb7423c7701721493bd00ea48
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date:   Thu Feb 27 10:18:55 2014 +0100

    Don't assert on multiple End records seen in a record set.
    
    Spotted by: Dag

diff --git a/lib/libvarnishapi/vsl_dispatch.c b/lib/libvarnishapi/vsl_dispatch.c
index 709b9fe..3acdbd2 100644
--- a/lib/libvarnishapi/vsl_dispatch.c
+++ b/lib/libvarnishapi/vsl_dispatch.c
@@ -842,10 +842,8 @@ vtx_scan(struct VSLQ *vslq, struct vtx *vtx)
 	const uint32_t *ptr;
 	enum VSL_tag_e tag;
 
-	if (vtx->flags & VTX_F_END)
-		return;
-
-	while (vslc_vtx_next(&vtx->c.cursor) == 1) {
+	while (!(vtx->flags & VTX_F_COMPLETE) &&
+	    vslc_vtx_next(&vtx->c.cursor) == 1) {
 		ptr = vtx->c.cursor.rec.ptr;
 		if (VSL_ID(ptr) != vtx->key.vxid) {
 			(void)vtx_diag_tag(vtx, ptr, "vxid missmatch");
@@ -867,12 +865,14 @@ vtx_scan(struct VSLQ *vslq, struct vtx *vtx)
 
 		case SLT_End:
 			vtx->flags |= VTX_F_END;
-			vtx_mark_complete(vslq, vtx);
 			break;
 		default:
 			break;
 		}
 	}
+
+	if (vtx->flags & VTX_F_END && !(vtx->flags & VTX_F_COMPLETE))
+		vtx_mark_complete(vslq, vtx);
 }
 
 /* Force a vtx into complete status by synthing the necessary outstanding



More information about the varnish-commit mailing list