diff --git a/ospf6d/ospf6_gr.c b/ospf6d/ospf6_gr.c index ecaaa038ab..f39da91415 100644 --- a/ospf6d/ospf6_gr.c +++ b/ospf6d/ospf6_gr.c @@ -293,8 +293,10 @@ static int ospf6_router_lsa_contains_adj(struct ospf6_area *area, if (lsdesc->type != OSPF6_ROUTER_LSDESC_POINTTOPOINT) continue; - if (lsdesc->neighbor_router_id == neighbor_router_id) + if (lsdesc->neighbor_router_id == neighbor_router_id) { + ospf6_lsa_unlock(lsa); return RTR_LSA_ADJ_FOUND; + } } } @@ -511,8 +513,10 @@ static bool ospf6_gr_check_adjs(struct ospf6 *ospf6) for (ALL_LSDB_TYPED_ADVRTR(area->lsdb, type, router, lsa_self)) { found = true; - if (!ospf6_gr_check_adjs_lsa(area, lsa_self)) + if (!ospf6_gr_check_adjs_lsa(area, lsa_self)) { + ospf6_lsa_unlock(lsa_self); return false; + } } if (!found) return false; diff --git a/ospf6d/ospf6_lsdb.c b/ospf6d/ospf6_lsdb.c index 7925a8b2f4..fa1a9a408d 100644 --- a/ospf6d/ospf6_lsdb.c +++ b/ospf6d/ospf6_lsdb.c @@ -236,8 +236,10 @@ struct ospf6_lsa *ospf6_find_inter_prefix_lsa(struct ospf6 *ospf6, prefix.prefixlen = prefix_lsa->prefix.prefix_length; ospf6_prefix_in6_addr(&prefix.u.prefix6, prefix_lsa, &prefix_lsa->prefix); - if (prefix_same(p, &prefix)) + if (prefix_same(p, &prefix)) { + ospf6_lsa_unlock(lsa); return lsa; + } } return NULL;