Commit 74efa168 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Properly implement VSC_Destroy()

Fixes #2420
parent ede8c3db
......@@ -1041,7 +1041,7 @@ do_curses(struct vsm *vsm, struct vsc *vsc, double delay)
break;
}
}
VSC_Destroy(&vsc);
VSC_Destroy(&vsc, vsm);
AN(VTAILQ_EMPTY(&ptlist));
VSM_Destroy(&vsm);
AZ(endwin());
......
......@@ -332,6 +332,10 @@ varnish_delete(struct varnish *v)
vtc_logclose(v->vl);
free(v->name);
free(v->workdir);
if (v->vsc != NULL)
VSC_Destroy(&v->vsc, v->vsm_vsc);
if (v->vsm_vsc != NULL)
VSM_Destroy(&v->vsm_vsc);
if (v->vsm_vsl != NULL)
VSM_Destroy(&v->vsm_vsl);
......
......@@ -103,7 +103,7 @@ struct vsc *VSC_New(void);
* Create a new VSC instance
*/
void VSC_Destroy(struct vsc **);
void VSC_Destroy(struct vsc **, struct vsm *);
/*
* Destroy a VSC instance
*
......
......@@ -121,33 +121,6 @@ VSC_New(void)
/*--------------------------------------------------------------------*/
static void
vsc_delete_sf_list(struct vsc_sf_head *head)
{
struct vsc_sf *sf;
while (!VTAILQ_EMPTY(head)) {
sf = VTAILQ_FIRST(head);
CHECK_OBJ_NOTNULL(sf, VSC_SF_MAGIC);
VTAILQ_REMOVE(head, sf, list);
free(sf->pattern);
FREE_OBJ(sf);
}
}
void
VSC_Destroy(struct vsc **vscp)
{
struct vsc *vsc;
TAKE_OBJ_NOTNULL(vsc, vscp, VSC_MAGIC);
vsc_delete_sf_list(&vsc->sf_list_include);
vsc_delete_sf_list(&vsc->sf_list_exclude);
FREE_OBJ(vsc);
}
/*--------------------------------------------------------------------*/
static int
vsc_f_arg(struct vsc *vsc, const char *opt)
{
......@@ -475,3 +448,36 @@ VSC_ChangeLevel(const struct VSC_level_desc *old, int chg)
i = 0;
return (levels[i]);
}
/*--------------------------------------------------------------------*/
static void
vsc_delete_sf_list(struct vsc_sf_head *head)
{
struct vsc_sf *sf;
while (!VTAILQ_EMPTY(head)) {
sf = VTAILQ_FIRST(head);
CHECK_OBJ_NOTNULL(sf, VSC_SF_MAGIC);
VTAILQ_REMOVE(head, sf, list);
free(sf->pattern);
FREE_OBJ(sf);
}
}
void
VSC_Destroy(struct vsc **vscp, struct vsm *vsm)
{
struct vsc *vsc;
struct vsc_seg *sp, *sp2;
TAKE_OBJ_NOTNULL(vsc, vscp, VSC_MAGIC);
vsc_delete_sf_list(&vsc->sf_list_include);
vsc_delete_sf_list(&vsc->sf_list_exclude);
VTAILQ_FOREACH_SAFE(sp, &vsc->segs, list, sp2) {
VTAILQ_REMOVE(&vsc->segs, sp, list);
vsc_del_seg(vsc, vsm, sp);
}
FREE_OBJ(vsc);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment