[6.0] 412460e64 in vmod destructors, tolerate failed object initializations
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Wed Oct 31 13:08:09 UTC 2018
commit 412460e64d528a9a1dbc0d984a0116b5fe9746d4
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Tue Aug 28 22:15:14 2018 +0200
in vmod destructors, tolerate failed object initializations
works around #2297
Conflicts:
lib/libvmod_directors/fall_back.c
lib/libvmod_directors/hash.c
lib/libvmod_directors/random.c
lib/libvmod_directors/round_robin.c
diff --git a/lib/libvmod_directors/fall_back.c b/lib/libvmod_directors/fall_back.c
index 8ae3ddc30..76561f596 100644
--- a/lib/libvmod_directors/fall_back.c
+++ b/lib/libvmod_directors/fall_back.c
@@ -108,9 +108,11 @@ vmod_fallback__fini(struct vmod_directors_fallback **fbp)
{
struct vmod_directors_fallback *fb;
- fb = *fbp;
- *fbp = NULL;
- CHECK_OBJ_NOTNULL(fb, VMOD_DIRECTORS_FALLBACK_MAGIC);
+ // XXX 2297
+ if (*fbp == NULL)
+ return;
+
+ TAKE_OBJ_NOTNULL(fb, fbp, VMOD_DIRECTORS_FALLBACK_MAGIC);
vdir_delete(&fb->vd);
FREE_OBJ(fb);
}
diff --git a/lib/libvmod_directors/hash.c b/lib/libvmod_directors/hash.c
index a05308195..be7d40b47 100644
--- a/lib/libvmod_directors/hash.c
+++ b/lib/libvmod_directors/hash.c
@@ -67,9 +67,11 @@ vmod_hash__fini(struct vmod_directors_hash **rrp)
{
struct vmod_directors_hash *rr;
- rr = *rrp;
- *rrp = NULL;
- CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_HASH_MAGIC);
+ // XXX 2297
+ if (*rrp == NULL)
+ return;
+
+ TAKE_OBJ_NOTNULL(rr, rrp, VMOD_DIRECTORS_HASH_MAGIC);
vdir_delete(&rr->vd);
FREE_OBJ(rr);
}
diff --git a/lib/libvmod_directors/random.c b/lib/libvmod_directors/random.c
index 4ce6328f3..856e6f3c0 100644
--- a/lib/libvmod_directors/random.c
+++ b/lib/libvmod_directors/random.c
@@ -95,9 +95,11 @@ vmod_random__fini(struct vmod_directors_random **rrp)
{
struct vmod_directors_random *rr;
- rr = *rrp;
- *rrp = NULL;
- CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_RANDOM_MAGIC);
+ // XXX 2297
+ if (*rrp == NULL)
+ return;
+
+ TAKE_OBJ_NOTNULL(rr, rrp, VMOD_DIRECTORS_RANDOM_MAGIC);
vdir_delete(&rr->vd);
FREE_OBJ(rr);
}
diff --git a/lib/libvmod_directors/round_robin.c b/lib/libvmod_directors/round_robin.c
index 7e888f365..767fe7258 100644
--- a/lib/libvmod_directors/round_robin.c
+++ b/lib/libvmod_directors/round_robin.c
@@ -104,9 +104,11 @@ vmod_round_robin__fini(struct vmod_directors_round_robin **rrp)
{
struct vmod_directors_round_robin *rr;
- rr = *rrp;
- *rrp = NULL;
- CHECK_OBJ_NOTNULL(rr, VMOD_DIRECTORS_ROUND_ROBIN_MAGIC);
+ // XXX 2297
+ if (*rrp == NULL)
+ return;
+
+ TAKE_OBJ_NOTNULL(rr, rrp, VMOD_DIRECTORS_ROUND_ROBIN_MAGIC);
vdir_delete(&rr->vd);
FREE_OBJ(rr);
}
diff --git a/lib/libvmod_directors/vmod_shard.c b/lib/libvmod_directors/vmod_shard.c
index 98f9c0321..b85aa43b8 100644
--- a/lib/libvmod_directors/vmod_shard.c
+++ b/lib/libvmod_directors/vmod_shard.c
@@ -265,6 +265,10 @@ vmod_shard__fini(struct vmod_directors_shard **vshardp)
{
struct vmod_directors_shard *vshard;
+ // XXX 2297
+ if (*vshardp == NULL)
+ return;
+
TAKE_OBJ_NOTNULL(vshard, vshardp, VMOD_SHARD_SHARD_MAGIC);
sharddir_delete(&vshard->shardd);
free(vshard->dir->vcl_name);
@@ -795,8 +799,10 @@ vmod_shard_param__fini(struct vmod_directors_shard_param **pp)
{
struct vmod_directors_shard_param *p;
+ // XXX 2297
if (*pp == NULL)
return;
+
TAKE_OBJ_NOTNULL(p, pp, VMOD_SHARD_SHARD_PARAM_MAGIC);
FREE_OBJ(p);
}
More information about the varnish-commit
mailing list