[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