[master] ef14640 Add ObjIterate() wrapper function

Poul-Henning Kamp phk at FreeBSD.org
Thu Dec 10 01:23:28 CET 2015


commit ef14640730b8eca2cfb7458d08ee10270ce7968f
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Dec 9 22:31:06 2015 +0000

    Add ObjIterate() wrapper function

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 4fac13c..eb892ae 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -855,6 +855,9 @@ void *MPL_Get(struct mempool *mpl, unsigned *size);
 void MPL_Free(struct mempool *mpl, void *item);
 
 /* cache_obj.c */
+typedef int objiterate_f(void *priv, int flush, const void *ptr, ssize_t len);
+int ObjIterate(struct worker *, struct objcore *,
+    void *priv, objiterate_f *func);
 enum objiter_status {
 	OIS_DONE,
 	OIS_DATA,
diff --git a/bin/varnishd/cache/cache_obj.c b/bin/varnishd/cache/cache_obj.c
index 53fe080..2203845 100644
--- a/bin/varnishd/cache/cache_obj.c
+++ b/bin/varnishd/cache/cache_obj.c
@@ -231,6 +231,40 @@ ObjIterEnd(struct objcore *oc, void **oix)
 	FREE_OBJ(oi);
 }
 
+int
+ObjIterate(struct worker *wrk, struct objcore *oc,
+    void *priv, objiterate_f *func)
+{
+	void *oi;
+	enum objiter_status ois;
+	void *ptr;
+	ssize_t len;
+
+	oi = ObjIterBegin(wrk, oc);
+	do {
+		ois = ObjIter(oc, oi, &ptr, &len);
+		switch(ois) {
+		case OIS_DONE:
+			AZ(len);
+			break;
+		case OIS_ERROR:
+			break;
+		case OIS_DATA:
+			if (func(priv, 0, ptr, len))
+				ois = OIS_ERROR;
+			break;
+		case OIS_STREAM:
+			if (func(priv, 1, ptr, len))
+				ois = OIS_ERROR;
+			break;
+		default:
+			WRONG("Wrong OIS value");
+		}
+	} while (ois == OIS_DATA || ois == OIS_STREAM);
+	ObjIterEnd(oc, &oi);
+	return (ois == OIS_DONE ? 0 : -1);
+}
+
 /*--------------------------------------------------------------------
  */
 



More information about the varnish-commit mailing list