[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