diff options
Diffstat (limited to 'ospfd/ospf_lsa.c')
-rw-r--r-- | ospfd/ospf_lsa.c | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c index 8b5c6eb8..b99b931c 100644 --- a/ospfd/ospf_lsa.c +++ b/ospfd/ospf_lsa.c @@ -294,20 +294,21 @@ ospf_lsa_lock (struct ospf_lsa *lsa) /* Unlock LSA. */ void -ospf_lsa_unlock (struct ospf_lsa *lsa) +ospf_lsa_unlock (struct ospf_lsa **lsa) { /* This is sanity check. */ - if (!lsa) + if (!lsa || !*lsa) return; - lsa->lock--; + (*lsa)->lock--; - assert (lsa->lock >= 0); + assert ((*lsa)->lock >= 0); - if (lsa->lock == 0) + if ((*lsa)->lock == 0) { - assert (CHECK_FLAG (lsa->flags, OSPF_LSA_DISCARD)); - ospf_lsa_free (lsa); + assert (CHECK_FLAG ((*lsa)->flags, OSPF_LSA_DISCARD)); + ospf_lsa_free (*lsa); + *lsa = NULL; } } @@ -318,7 +319,7 @@ ospf_lsa_discard (struct ospf_lsa *lsa) if (!CHECK_FLAG (lsa->flags, OSPF_LSA_DISCARD)) { SET_FLAG (lsa->flags, OSPF_LSA_DISCARD); - ospf_lsa_unlock (lsa); + ospf_lsa_unlock (&lsa); } } @@ -1044,7 +1045,7 @@ ospf_router_lsa_update_timer (struct thread *thread) zlog_debug("LSA[Type%d:%s]: Refresh router-LSA for Area %s", lsa->data->type, inet_ntoa (lsa->data->id), area_str); ospf_lsa_flush_area (lsa, area); - ospf_lsa_unlock (area->router_lsa_self); + ospf_lsa_unlock (&area->router_lsa_self); area->router_lsa_self = NULL; /* Refresh router-LSA, (not install) and flood through area. */ @@ -1850,7 +1851,7 @@ ospf_install_flood_nssa (struct ospf *ospf, { if (IS_DEBUG_OSPF_NSSA) zlog_debug ("LSA[Type-7]: Could not build FWD-ADDR"); - ospf_lsa_discard(new); + ospf_lsa_discard (new); return; } } @@ -2518,7 +2519,7 @@ ospf_router_lsa_install (struct ospf *ospf, ospf_router_lsa_timer, OSPF_LS_REFRESH_TIME); /* Set self-originated router-LSA. */ - ospf_lsa_unlock (area->router_lsa_self); + ospf_lsa_unlock (&area->router_lsa_self); area->router_lsa_self = ospf_lsa_lock (new); if (IS_DEBUG_OSPF (lsa, LSA_INSTALL)) @@ -2562,7 +2563,7 @@ ospf_network_lsa_install (struct ospf *ospf, ospf_network_lsa_refresh_timer, OSPF_LS_REFRESH_TIME); - ospf_lsa_unlock (oi->network_lsa_self); + ospf_lsa_unlock (&oi->network_lsa_self); oi->network_lsa_self = ospf_lsa_lock (new); } @@ -3067,7 +3068,7 @@ ospf_lsa_maxage_delete (struct ospf *ospf, struct ospf_lsa *lsa) if ((n = listnode_lookup (ospf->maxage_lsa, lsa))) { list_delete_node (ospf->maxage_lsa, n); - ospf_lsa_unlock (lsa); + ospf_lsa_unlock (&lsa); /* maxage_lsa */ } } @@ -3482,7 +3483,7 @@ ospf_flush_self_originated_lsas_now (struct ospf *ospf) zlog_debug ("LSA[Type%d:%s]: Schedule self-originated LSA to FLUSH", lsa->data->type, inet_ntoa (lsa->data->id)); ospf_lsa_flush_area (lsa, area); - ospf_lsa_unlock (area->router_lsa_self); + ospf_lsa_unlock (&area->router_lsa_self); area->router_lsa_self = NULL; OSPF_TIMER_OFF (area->t_router_lsa_self); } @@ -3497,7 +3498,7 @@ ospf_flush_self_originated_lsas_now (struct ospf *ospf) zlog_debug ("LSA[Type%d:%s]: Schedule self-originated LSA to FLUSH", lsa->data->type, inet_ntoa (lsa->data->id)); ospf_lsa_flush_area (oi->network_lsa_self, area); - ospf_lsa_unlock (oi->network_lsa_self); + ospf_lsa_unlock (&oi->network_lsa_self); oi->network_lsa_self = NULL; OSPF_TIMER_OFF (oi->t_network_lsa_self); } @@ -3666,7 +3667,7 @@ ospf_lsa_action (struct thread *t) break; } - ospf_lsa_unlock (data->lsa); + ospf_lsa_unlock (&data->lsa); /* Message */ XFREE (MTYPE_OSPF_MESSAGE, data); return 0; } @@ -3681,7 +3682,7 @@ ospf_schedule_lsa_flood_area (struct ospf_area *area, struct ospf_lsa *lsa) data->action = LSA_ACTION_FLOOD_AREA; data->area = area; - data->lsa = ospf_lsa_lock (lsa); + data->lsa = ospf_lsa_lock (lsa); /* Message / Flood area */ thread_add_event (master, ospf_lsa_action, data, 0); } @@ -3696,7 +3697,7 @@ ospf_schedule_lsa_flush_area (struct ospf_area *area, struct ospf_lsa *lsa) data->action = LSA_ACTION_FLUSH_AREA; data->area = area; - data->lsa = ospf_lsa_lock (lsa); + data->lsa = ospf_lsa_lock (lsa); /* Message / Flush area */ thread_add_event (master, ospf_lsa_action, data, 0); } @@ -3779,7 +3780,8 @@ ospf_refresher_register_lsa (struct ospf *ospf, struct ospf_lsa *lsa) inet_ntoa (lsa->data->id), LS_AGE (lsa), index); if (!ospf->lsa_refresh_queue.qs[index]) ospf->lsa_refresh_queue.qs[index] = list_new (); - listnode_add (ospf->lsa_refresh_queue.qs[index], ospf_lsa_lock (lsa)); + listnode_add (ospf->lsa_refresh_queue.qs[index], + ospf_lsa_lock (lsa)); /* lsa_refresh_queue */ lsa->refresh_list = index; if (IS_DEBUG_OSPF (lsa, LSA_REFRESH)) zlog_debug ("LSA[Refresh:%s]: ospf_refresher_register_lsa(): " @@ -3801,7 +3803,7 @@ ospf_refresher_unregister_lsa (struct ospf *ospf, struct ospf_lsa *lsa) list_free (refresh_list); ospf->lsa_refresh_queue.qs[lsa->refresh_list] = NULL; } - ospf_lsa_unlock (lsa); + ospf_lsa_unlock (&lsa); /* lsa_refresh_queue */ lsa->refresh_list = -1; } } @@ -3855,7 +3857,7 @@ ospf_lsa_refresh_walker (struct thread *t) inet_ntoa (lsa->data->id), lsa, i); list_delete_node (refresh_list, node); - ospf_lsa_unlock (lsa); + ospf_lsa_unlock (&lsa); /* lsa_refresh_queue */ lsa->refresh_list = -1; listnode_add (lsa_to_refresh, lsa); } |