summaryrefslogtreecommitdiff
path: root/ospfd
diff options
context:
space:
mode:
authorpaul <paul>2003-07-24 23:22:57 +0000
committerpaul <paul>2003-07-24 23:22:57 +0000
commit736d3441e267c76056d6fcc2f59cd09a90f3af21 (patch)
treee5ab36856be58c03bcec234916dfa52aabc38441 /ospfd
parent7021c425a9f5bd9f62b934124becbaadd961cac0 (diff)
2003-07-25 kamatchi soundaram <kamatchi@tdd.sj.nec.com>
* ospf_packet.c (ospf_ls_upd_send_queue_event): get next route node in body of the loop to avoid chance that route node is unlocked and deleted before the next iteration tries to get next route node.
Diffstat (limited to 'ospfd')
-rw-r--r--ospfd/ChangeLog7
-rw-r--r--ospfd/ospf_packet.c10
2 files changed, 14 insertions, 3 deletions
diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog
index 7720adcc..27454aa2 100644
--- a/ospfd/ChangeLog
+++ b/ospfd/ChangeLog
@@ -1,3 +1,10 @@
+2003-07-25 kamatchi soundaram <kamatchi@tdd.sj.nec.com>
+
+ * ospf_packet.c (ospf_ls_upd_send_queue_event): get next route
+ node in body of the loop to avoid chance that route node
+ is unlocked and deleted before the next iteration tries to
+ get next route node.
+
2003-05-24 Kenji Yabuuchi
* ospf_interface.c(ospf_if_lookup_recv_if): Use the most specific
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index 9e4be062..a0a9931c 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -3113,19 +3113,23 @@ ospf_ls_upd_send_queue_event (struct thread *thread)
{
struct ospf_interface *oi = THREAD_ARG(thread);
struct route_node *rn;
+ struct route_node *rnext;
oi->t_ls_upd_event = NULL;
if (IS_DEBUG_OSPF_EVENT)
zlog_info ("ospf_ls_upd_send_queue start");
- for (rn = route_top (oi->ls_upd_queue); rn; rn = route_next (rn))
+ for (rn = route_top (oi->ls_upd_queue); rn; rn = rnext)
{
+
+ rnext = route_next (rn);
+
if (rn->info == NULL)
- continue;
+ continue;
while (!list_isempty ((list)rn->info))
- ospf_ls_upd_queue_send (oi, rn->info, rn->p.u.prefix4);
+ ospf_ls_upd_queue_send (oi, rn->info, rn->p.u.prefix4);
list_delete (rn->info);
rn->info = NULL;