[master] bdd7029 Always munmap(2) segments when we delete them.

Poul-Henning Kamp phk at FreeBSD.org
Tue Aug 29 12:13:05 CEST 2017


commit bdd702906d47de2a47e00d9216772da7a08a0b63
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Tue Aug 29 10:11:46 2017 +0000

    Always munmap(2) segments when we delete them.

diff --git a/lib/libvarnishapi/vsm.c b/lib/libvarnishapi/vsm.c
index 21618b0..482b5b7 100644
--- a/lib/libvarnishapi/vsm.c
+++ b/lib/libvarnishapi/vsm.c
@@ -294,6 +294,26 @@ VSM_ResetError(struct vsm *vd)
 /*--------------------------------------------------------------------
  */
 
+static void
+vsm_unmap(struct vsm_seg *vg)
+{
+	size_t sz, ps, len;
+
+	CHECK_OBJ_NOTNULL(vg, VSM_SEG_MAGIC);
+	AN(vg->b);
+	AN(vg->e);
+	sz = strtoul(vg->av[2], NULL, 10);
+	assert(sz > 0);
+	ps = getpagesize();
+	len = RUP2(sz, ps);
+	AZ(munmap(vg->b, len));
+	vg->b = NULL;
+	vg->e = NULL;
+}
+
+/*--------------------------------------------------------------------
+ */
+
 #define VSM_NUKE_ALL	(1U << 16)
 
 static int
@@ -325,7 +345,6 @@ vsm_refresh_set2(struct vsm *vd, struct vsm_set *vs, struct vsb *vsb)
 	char **av;
 	struct vsm_seg *vg, *vg2;
 
-
 	CHECK_OBJ_NOTNULL(vd, VSM_MAGIC);
 	CHECK_OBJ_NOTNULL(vs, VSM_SET_MAGIC);
 	if (vs->dfd >= 0) {
@@ -463,7 +482,8 @@ vsm_refresh_set(struct vsm *vd, struct vsm_set *vs, struct vsb *vsb)
 				vg->stale = 1;
 				VTAILQ_INSERT_TAIL(&vs->stale, vg, list);
 			} else {
-				// XXX: munmap
+				if (vg->b != NULL)
+					vsm_unmap(vg);
 				VAV_Free(vg->av);
 				FREE_OBJ(vg);
 			}
@@ -696,7 +716,6 @@ int
 VSM_Unmap(struct vsm *vd, struct vsm_fantom *vf)
 {
 	struct vsm_seg *vg;
-	size_t sz, ps, len;
 
 	CHECK_OBJ_NOTNULL(vd, VSM_MAGIC);
 	AN(vd->attached);
@@ -716,12 +735,7 @@ VSM_Unmap(struct vsm *vd, struct vsm_fantom *vf)
 		VAV_Free(vg->av);
 		FREE_OBJ(vg);
 	} else {
-		sz = strtoul(vg->av[2], NULL, 10);
-		assert(sz > 0);
-		ps = getpagesize();
-		len = RUP2(sz, ps);
-		AZ(munmap(vg->b, len));
-		vg->b = vg->e = NULL;
+		vsm_unmap(vg);
 	}
 	return (0);
 }



More information about the varnish-commit mailing list