[master] c0a4ee41c in vmod destructors, tolerate failed object initializations

Nils Goroll nils.goroll at uplex.de
Tue Aug 28 20:16:08 UTC 2018


commit c0a4ee41ca968df7fd0efa64d794c7629d75c233
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

diff --git a/lib/libvmod_directors/fall_back.c b/lib/libvmod_directors/fall_back.c
index e6d3e7226..02ac28186 100644
--- a/lib/libvmod_directors/fall_back.c
+++ b/lib/libvmod_directors/fall_back.c
@@ -124,6 +124,10 @@ vmod_fallback__fini(struct vmod_directors_fallback **fbp)
 {
 	struct vmod_directors_fallback *fb;
 
+	// XXX 2297
+	if (*fbp == NULL)
+		return;
+
 	TAKE_OBJ_NOTNULL(fb, fbp, VMOD_DIRECTORS_FALLBACK_MAGIC);
 	VRT_DelDirector(&fb->vd->dir);
 }
diff --git a/lib/libvmod_directors/hash.c b/lib/libvmod_directors/hash.c
index a82e19fe3..010aaeaa2 100644
--- a/lib/libvmod_directors/hash.c
+++ b/lib/libvmod_directors/hash.c
@@ -83,6 +83,10 @@ vmod_hash__fini(struct vmod_directors_hash **rrp)
 {
 	struct vmod_directors_hash *rr;
 
+	// XXX 2297
+	if (*rrp == NULL)
+		return;
+
 	TAKE_OBJ_NOTNULL(rr, rrp, VMOD_DIRECTORS_HASH_MAGIC);
 	VRT_DelDirector(&rr->vd->dir);
 }
diff --git a/lib/libvmod_directors/random.c b/lib/libvmod_directors/random.c
index 430f3e594..567315193 100644
--- a/lib/libvmod_directors/random.c
+++ b/lib/libvmod_directors/random.c
@@ -111,6 +111,10 @@ vmod_random__fini(struct vmod_directors_random **rrp)
 {
 	struct vmod_directors_random *rr;
 
+	// XXX 2297
+	if (*rrp == NULL)
+		return;
+
 	TAKE_OBJ_NOTNULL(rr, rrp, VMOD_DIRECTORS_RANDOM_MAGIC);
 	VRT_DelDirector(&rr->vd->dir);
 }
diff --git a/lib/libvmod_directors/round_robin.c b/lib/libvmod_directors/round_robin.c
index af2aec3b8..bd50bfedd 100644
--- a/lib/libvmod_directors/round_robin.c
+++ b/lib/libvmod_directors/round_robin.c
@@ -119,6 +119,10 @@ vmod_round_robin__fini(struct vmod_directors_round_robin **rrp)
 {
 	struct vmod_directors_round_robin *rr;
 
+	// XXX 2297
+	if (*rrp == NULL)
+		return;
+
 	TAKE_OBJ_NOTNULL(rr, rrp, VMOD_DIRECTORS_ROUND_ROBIN_MAGIC);
 	VRT_DelDirector(&rr->vd->dir);
 }
diff --git a/lib/libvmod_directors/vmod_shard.c b/lib/libvmod_directors/vmod_shard.c
index 558675335..1d366195c 100644
--- a/lib/libvmod_directors/vmod_shard.c
+++ b/lib/libvmod_directors/vmod_shard.c
@@ -270,6 +270,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);
 	VRT_DelDirector(&vshard->dir);
 	FREE_OBJ(vshard);
@@ -785,8 +789,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