summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--isisd/isis_adjacency.c5
-rw-r--r--isisd/isis_events.c6
-rw-r--r--isisd/isis_lsp.c18
-rw-r--r--isisd/isis_route.c3
4 files changed, 22 insertions, 10 deletions
diff --git a/isisd/isis_adjacency.c b/isisd/isis_adjacency.c
index c7ab83ba0..8afabede4 100644
--- a/isisd/isis_adjacency.c
+++ b/isisd/isis_adjacency.c
@@ -507,6 +507,11 @@ isis_adj_build_up_list (struct list *adjdb, struct list *list)
struct isis_adjacency *adj;
struct listnode *node;
+ if (adjdb == NULL) {
+ zlog_warn ("isis_adj_build_up_list(): adjacency DB is empty");
+ return;
+ }
+
if (!list)
{
zlog_warn ("isis_adj_build_up_list(): NULL list");
diff --git a/isisd/isis_events.c b/isisd/isis_events.c
index 460b1d25b..abc4471ca 100644
--- a/isisd/isis_events.c
+++ b/isisd/isis_events.c
@@ -137,8 +137,10 @@ circuit_resign_level (struct isis_circuit *circuit, int level)
THREAD_TIMER_OFF (circuit->u.bc.t_refresh_pseudo_lsp[idx]);
circuit->lsp_regenerate_pending[idx] = 0;
circuit->u.bc.run_dr_elect[idx] = 0;
- list_delete (circuit->u.bc.lan_neighs[idx]);
- circuit->u.bc.lan_neighs[idx] = NULL;
+ if (circuit->u.bc.lan_neighs[idx] != NULL) {
+ list_delete (circuit->u.bc.lan_neighs[idx]);
+ circuit->u.bc.lan_neighs[idx] = NULL;
+ }
}
return;
diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c
index 0177a9423..55887f901 100644
--- a/isisd/isis_lsp.c
+++ b/isisd/isis_lsp.c
@@ -138,14 +138,16 @@ lsp_destroy (struct isis_lsp *lsp)
if (!lsp)
return;
- for (ALL_LIST_ELEMENTS_RO (lsp->area->circuit_list, cnode, circuit))
- {
- if (circuit->lsp_queue == NULL)
- continue;
- for (ALL_LIST_ELEMENTS (circuit->lsp_queue, lnode, lnnode, lsp_in_list))
- if (lsp_in_list == lsp)
- list_delete_node(circuit->lsp_queue, lnode);
- }
+ if (lsp->area->circuit_list) {
+ for (ALL_LIST_ELEMENTS_RO (lsp->area->circuit_list, cnode, circuit))
+ {
+ if (circuit->lsp_queue == NULL)
+ continue;
+ for (ALL_LIST_ELEMENTS (circuit->lsp_queue, lnode, lnnode, lsp_in_list))
+ if (lsp_in_list == lsp)
+ list_delete_node(circuit->lsp_queue, lnode);
+ }
+ }
ISIS_FLAGS_CLEAR_ALL (lsp->SSNflags);
ISIS_FLAGS_CLEAR_ALL (lsp->SRMflags);
diff --git a/isisd/isis_route.c b/isisd/isis_route.c
index 67d45c8f1..cc3ecba0d 100644
--- a/isisd/isis_route.c
+++ b/isisd/isis_route.c
@@ -643,6 +643,9 @@ isis_route_validate (struct isis_area *area)
isis_route_validate_merge (area, AF_INET6);
#endif
+ if (!area->circuit_list) {
+ return;
+ }
/* walk all circuits and reset any spf specific flags */
for (ALL_LIST_ELEMENTS_RO (area->circuit_list, node, circuit))
UNSET_FLAG(circuit->flags, ISIS_CIRCUIT_FLAPPED_AFTER_SPF);