[master] 46cc55c53 Add an advisory hint to object iterators signalling that this is the last segment.

Poul-Henning Kamp phk at FreeBSD.org
Wed Oct 10 10:00:26 UTC 2018


commit 46cc55c53b507b8c8181a3d5e9f65829f6ab1ed8
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Oct 10 09:56:23 2018 +0000

    Add an advisory hint to object iterators signalling that this is
    the last segment.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index b63664706..b038ad157 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -686,7 +686,10 @@ int ObjHasAttr(struct worker *, struct objcore *, enum obj_attr);
 const void *ObjGetAttr(struct worker *, struct objcore *, enum obj_attr,
     ssize_t *len);
 
-typedef int objiterate_f(void *priv, int flush, const void *ptr, ssize_t len);
+typedef int objiterate_f(void *priv, unsigned flush,
+    const void *ptr, ssize_t len);
+#define OBJ_ITER_FLUSH	0x01
+#define OBJ_ITER_FINAL	0x02
 
 int ObjIterate(struct worker *, struct objcore *,
     void *priv, objiterate_f *func, int final);
diff --git a/bin/varnishd/cache/cache_deliver_proc.c b/bin/varnishd/cache/cache_deliver_proc.c
index 6d603ad77..aa6a9a7ca 100644
--- a/bin/varnishd/cache/cache_deliver_proc.c
+++ b/bin/varnishd/cache/cache_deliver_proc.c
@@ -138,8 +138,9 @@ VDP_close(struct req *req)
 /*--------------------------------------------------------------------*/
 
 static int v_matchproto_(objiterate_f)
-vdp_objiterator(void *priv, int flush, const void *ptr, ssize_t len)
+vdp_objiterator(void *priv, unsigned flush, const void *ptr, ssize_t len)
 {
+
 	return (VDP_bytes(priv, flush ? VDP_FLUSH : VDP_NULL, ptr, len));
 }
 
diff --git a/bin/varnishd/cache/cache_esi_deliver.c b/bin/varnishd/cache/cache_esi_deliver.c
index 061d1e83c..312c2a986 100644
--- a/bin/varnishd/cache/cache_esi_deliver.c
+++ b/bin/varnishd/cache/cache_esi_deliver.c
@@ -575,7 +575,7 @@ struct ved_foo {
 };
 
 static int v_matchproto_(objiterate_f)
-ved_objiterate(void *priv, int flush, const void *ptr, ssize_t len)
+ved_objiterate(void *priv, unsigned flush, const void *ptr, ssize_t len)
 {
 	struct ved_foo *foo;
 	const uint8_t *pp;
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index c1cf95f32..1235313e0 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -702,15 +702,15 @@ vbf_stp_fetchend(struct worker *wrk, struct busyobj *bo)
  */
 
 static int v_matchproto_(objiterate_f)
-vbf_objiterator(void *priv, int flush, const void *ptr, ssize_t len)
+vbf_objiterator(void *priv, unsigned flush, const void *ptr, ssize_t len)
 {
 	struct busyobj *bo;
 	ssize_t l;
 	const uint8_t *ps = ptr;
 	uint8_t *pd;
 
-	(void)flush;
 	CAST_OBJ_NOTNULL(bo, priv, BUSYOBJ_MAGIC);
+	(void)flush;
 
 	while (len > 0) {
 		l = len;
diff --git a/bin/varnishd/cache/cache_req_body.c b/bin/varnishd/cache/cache_req_body.c
index d170bbce6..86d1dd4bf 100644
--- a/bin/varnishd/cache/cache_req_body.c
+++ b/bin/varnishd/cache/cache_req_body.c
@@ -226,7 +226,7 @@ VRB_Iterate(struct req *req, objiterate_f *func, void *priv)
  */
 
 static int v_matchproto_(objiterate_f)
-httpq_req_body_discard(void *priv, int flush, const void *ptr, ssize_t len)
+httpq_req_body_discard(void *priv, unsigned flush, const void *ptr, ssize_t len)
 {
 
 	(void)priv;
diff --git a/bin/varnishd/http1/cache_http1_fetch.c b/bin/varnishd/http1/cache_http1_fetch.c
index 2ddc58142..b8e3e876f 100644
--- a/bin/varnishd/http1/cache_http1_fetch.c
+++ b/bin/varnishd/http1/cache_http1_fetch.c
@@ -46,7 +46,7 @@
  */
 
 static int v_matchproto_(objiterate_f)
-vbf_iter_req_body(void *priv, int flush, const void *ptr, ssize_t l)
+vbf_iter_req_body(void *priv, unsigned flush, const void *ptr, ssize_t l)
 {
 	struct busyobj *bo;
 
diff --git a/bin/varnishd/storage/storage_simple.c b/bin/varnishd/storage/storage_simple.c
index 776f5f7ff..0606f997e 100644
--- a/bin/varnishd/storage/storage_simple.c
+++ b/bin/varnishd/storage/storage_simple.c
@@ -246,6 +246,7 @@ sml_iterator(struct worker *wrk, struct objcore *oc,
 	ssize_t sl;
 	void *p;
 	ssize_t l;
+	unsigned u;
 
 	obj = sml_getobj(wrk, oc);
 	CHECK_OBJ_NOTNULL(obj, OBJECT_MAGIC);
@@ -256,8 +257,13 @@ sml_iterator(struct worker *wrk, struct objcore *oc,
 
 	if (boc == NULL) {
 		VTAILQ_FOREACH_SAFE(st, &obj->list, list, checkpoint) {
+			u = 0;
+			if (VTAILQ_NEXT(st, list) == NULL)
+				u |= OBJ_ITER_FINAL;
+			if (final)
+				u |= OBJ_ITER_FLUSH;
 			if (ret == 0 && st->len > 0)
-				ret = func(priv, 1, st->ptr, st->len);
+				ret = func(priv, u, st->ptr, st->len);
 			if (final) {
 				VTAILQ_REMOVE(&obj->list, st, list);
 				sml_stv_free(stv, st);
@@ -322,7 +328,10 @@ sml_iterator(struct worker *wrk, struct objcore *oc,
 			st = NULL;
 		Lck_Unlock(&boc->mtx);
 		assert(l > 0 || boc->state == BOS_FINISHED);
-		ret = func(priv, st != NULL ? final : 1, p, l);
+		u = 0;
+		if (st == NULL || final)
+			u |= OBJ_ITER_FLUSH;
+		ret = func(priv, u, p, l);
 		if (ret)
 			break;
 	}


More information about the varnish-commit mailing list