[master] b57d746e4 vsc: Delete lists of segments
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Wed Jul 3 10:04:05 UTC 2024
commit b57d746e4c7752a8fc404a839082ce93e9e6a20a
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date: Mon Jun 3 22:41:51 2024 +0200
vsc: Delete lists of segments
Co-authored-by: Martin Blix Grydeland <martin at varnish-software.com>
diff --git a/lib/libvarnishapi/vsc.c b/lib/libvarnishapi/vsc.c
index c6de69656..25f9680c0 100644
--- a/lib/libvarnishapi/vsc.c
+++ b/lib/libvarnishapi/vsc.c
@@ -101,6 +101,7 @@ struct vsc_seg {
int mapped;
int exposed;
};
+VTAILQ_HEAD(vsc_seg_head, vsc_seg);
struct vsc {
unsigned magic;
@@ -108,7 +109,7 @@ struct vsc {
unsigned raw;
struct vsc_sf_head sf_list;
- VTAILQ_HEAD(,vsc_seg) segs;
+ struct vsc_seg_head segs;
VSC_new_f *fnew;
VSC_destroy_f *fdestroy;
@@ -319,15 +320,6 @@ vsc_fill_point(const struct vsc *vsc, const struct vsc_seg *seg,
point->point.raw = vsc->raw;
}
-static void
-vsc_del_seg(struct vsc_seg *sp)
-{
- CHECK_OBJ_NOTNULL(sp, VSC_SEG_MAGIC);
- AZ(sp->exposed);
- AZ(sp->mapped);
- FREE_OBJ(sp);
-}
-
static struct vsc_seg *
vsc_new_seg(const struct vsm_fantom *fp, enum vsc_seg_type type)
{
@@ -505,6 +497,23 @@ vsc_expose(const struct vsc *vsc, struct vsc_seg *sp, int del)
sp->exposed = expose;
}
+/*--------------------------------------------------------------------
+ */
+
+static void
+vsc_del_segs(struct vsc *vsc, struct vsm *vsm, struct vsc_seg_head *head)
+{
+ struct vsc_seg *sp, *sp2;
+
+ VTAILQ_FOREACH_SAFE(sp, head, list, sp2) {
+ CHECK_OBJ(sp, VSC_SEG_MAGIC);
+ VTAILQ_REMOVE(head, sp, list);
+ vsc_expose(vsc, sp, 1);
+ vsc_unmap_seg(vsc, vsm, sp);
+ FREE_OBJ(sp);
+ }
+}
+
/*--------------------------------------------------------------------
*/
@@ -533,7 +542,7 @@ VSC_Iter(struct vsc *vsc, struct vsm *vsm, VSC_iter_f *fiter, void *priv)
enum vsc_seg_type type;
struct vsm_fantom ifantom;
struct vsc_seg *sp, *sp2;
- VTAILQ_HEAD(, vsc_seg) removed;
+ struct vsc_seg_head removed;
int i = 0;
CHECK_OBJ_NOTNULL(vsc, VSC_MAGIC);
@@ -595,16 +604,7 @@ VSC_Iter(struct vsc *vsc, struct vsm *vsm, VSC_iter_f *fiter, void *priv)
VTAILQ_INSERT_TAIL(&removed, sp2, list);
}
- /* Clean up any removed segs */
- while (!VTAILQ_EMPTY(&removed)) {
- sp = VTAILQ_FIRST(&removed);
- CHECK_OBJ_NOTNULL(sp, VSC_SEG_MAGIC);
- VTAILQ_REMOVE(&removed, sp, list);
-
- vsc_expose(vsc, sp, 1);
- vsc_unmap_seg(vsc, vsm, sp);
- vsc_del_seg(sp);
- }
+ vsc_del_segs(vsc, vsm, &removed);
/* Iterate our shadow list, reporting on each pointer value */
VTAILQ_FOREACH(sp, &vsc->segs, list) {
@@ -682,7 +682,6 @@ VSC_Destroy(struct vsc **vscp, struct vsm *vsm)
{
struct vsc *vsc;
struct vsc_sf *sf, *sf2;
- struct vsc_seg *sp, *sp2;
TAKE_OBJ_NOTNULL(vsc, vscp, VSC_MAGIC);
@@ -692,11 +691,7 @@ VSC_Destroy(struct vsc **vscp, struct vsm *vsm)
free(sf->pattern);
FREE_OBJ(sf);
}
- VTAILQ_FOREACH_SAFE(sp, &vsc->segs, list, sp2) {
- VTAILQ_REMOVE(&vsc->segs, sp, list);
- vsc_expose(vsc, sp, 1);
- vsc_unmap_seg(vsc, vsm, sp);
- vsc_del_seg(sp);
- }
+
+ vsc_del_segs(vsc, vsm, &vsc->segs);
FREE_OBJ(vsc);
}
More information about the varnish-commit
mailing list