Mailing List Archive

[master] 083505193 Fix use of objiterate_f in vrb_pull()
commit 083505193a5065fab0359568816b5e733b69edc3
Author: Nils Goroll <nils.goroll@uplex.de>
Date: Sun Dec 31 18:09:42 2023 +0100

Fix use of objiterate_f in vrb_pull()

The objiterate_f interface requires that OBJ_ITER_END be sent,
preferrably with the last chunk of data, but at least after it.

diff --git a/bin/varnishd/cache/cache_req_body.c b/bin/varnishd/cache/cache_req_body.c
index 70996a2f1..c3afeb853 100644
--- a/bin/varnishd/cache/cache_req_body.c
+++ b/bin/varnishd/cache/cache_req_body.c
@@ -59,6 +59,7 @@ vrb_pull(struct req *req, ssize_t maxsize, objiterate_f *func, void *priv)
enum vfp_status vfps = VFP_ERROR;
const struct stevedore *stv;
ssize_t req_bodybytes = 0;
+ unsigned flush = OBJ_ITER_FLUSH;

CHECK_OBJ_NOTNULL(req, REQ_MAGIC);

@@ -125,7 +126,9 @@ vrb_pull(struct req *req, ssize_t maxsize, objiterate_f *func, void *priv)
else if (yet > 0)
yet = 0;
if (func != NULL) {
- r = func(priv, 1, ptr, l);
+ if (vfps == VFP_END)
+ flush |= OBJ_ITER_END;
+ r = func(priv, flush, ptr, l);
if (r)
break;
} else {
@@ -140,6 +143,8 @@ vrb_pull(struct req *req, ssize_t maxsize, objiterate_f *func, void *priv)
if (func != NULL) {
HSH_DerefBoc(req->wrk, req->body_oc);
AZ(HSH_DerefObjCore(req->wrk, &req->body_oc, 0));
+ if (vfps == VFP_END && (flush & OBJ_ITER_END) == 0)
+ func(priv, flush | OBJ_ITER_END, NULL, 0);
if (vfps != VFP_END) {
req->req_body_status = BS_ERROR;
if (r == 0)
_______________________________________________
varnish-commit mailing list
varnish-commit@varnish-cache.org
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-commit