summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zebra/zebra_pbr.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/zebra/zebra_pbr.c b/zebra/zebra_pbr.c
index fe7a93a50c..ff3907451b 100644
--- a/zebra/zebra_pbr.c
+++ b/zebra/zebra_pbr.c
@@ -483,8 +483,10 @@ static void zebra_pbr_cleanup_ipset(struct hash_bucket *b, void *data)
int *sock = data;
if (ipset->sock == *sock) {
- hook_call(zebra_pbr_ipset_update, 0, ipset);
- hash_release(zrouter.ipset_hash, ipset);
+ if (hash_release(zrouter.ipset_hash, ipset))
+ zebra_pbr_ipset_free(ipset);
+ else
+ hook_call(zebra_pbr_ipset_update, 0, ipset);
}
}
@@ -494,8 +496,10 @@ static void zebra_pbr_cleanup_ipset_entry(struct hash_bucket *b, void *data)
int *sock = data;
if (ipset->sock == *sock) {
- hook_call(zebra_pbr_ipset_entry_update, 0, ipset);
- hash_release(zrouter.ipset_entry_hash, ipset);
+ if (hash_release(zrouter.ipset_entry_hash, ipset))
+ zebra_pbr_ipset_entry_free(ipset);
+ else
+ hook_call(zebra_pbr_ipset_entry_update, 0, ipset);
}
}
@@ -505,8 +509,10 @@ static void zebra_pbr_cleanup_iptable(struct hash_bucket *b, void *data)
int *sock = data;
if (iptable->sock == *sock) {
- hook_call(zebra_pbr_iptable_update, 0, iptable);
- hash_release(zrouter.iptable_hash, iptable);
+ if (hash_release(zrouter.iptable_hash, iptable))
+ zebra_pbr_iptable_free(iptable);
+ else
+ hook_call(zebra_pbr_iptable_update, 0, iptable);
}
}