diff options
author | Paul Jakma <paul.jakma@sun.com> | 2008-01-29 19:29:44 +0000 |
---|---|---|
committer | Paul Jakma <paul.jakma@sun.com> | 2008-01-29 19:29:44 +0000 |
commit | c7350c48462e305f18f6fb02eceac170f892e450 (patch) | |
tree | e2eff38fc86e29bcd394d57d69c5ecd7ce7e9d40 /isisd/isisd.c | |
parent | 90b68769a1a1d7623cae02be71b7a8e4094455ad (diff) |
[isisd] Bug #437: fix ssert caused by bad list management
2008-01-29 James Carlson <james.d.carlson@sun.com>
* Fix bug #437, assert due to bogus index management
* isis_flags.c: (flags_initialize) new
* (flags_get_index) fix off by one, leading to list assert
on null node data.
(flags_free_index) ditto.
* isisd.c: (isis_area_create) use flags_initialize
(isis_area_destroy) deconfigure circuits when
taking down area.
Diffstat (limited to 'isisd/isisd.c')
-rw-r--r-- | isisd/isisd.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/isisd/isisd.c b/isisd/isisd.c index 48ea47af..7c669fcb 100644 --- a/isisd/isisd.c +++ b/isisd/isisd.c @@ -130,7 +130,7 @@ isis_area_create () area->circuit_list = list_new (); area->area_addrs = list_new (); THREAD_TIMER_ON (master, area->t_tick, lsp_tick, area, 1); - area->flags.maxindex = -1; + flags_initialize (&area->flags); /* * Default values */ @@ -215,7 +215,11 @@ isis_area_destroy (struct vty *vty, const char *area_tag) if (area->circuit_list) { for (ALL_LIST_ELEMENTS (area->circuit_list, node, nnode, circuit)) - isis_circuit_del (circuit); + { + /* The fact that it's in circuit_list means that it was configured */ + isis_circuit_deconfigure (circuit, area); + isis_circuit_del (circuit); + } list_delete (area->circuit_list); } |