summaryrefslogtreecommitdiffstats
path: root/ospfd/ospf_packet.c
diff options
context:
space:
mode:
authorpaul <paul>2003-07-24 23:22:57 +0000
committerpaul <paul>2003-07-24 23:22:57 +0000
commit2fd2f99d820af4d5a81e2039c99d48c508bf2913 (patch)
treeb7160bb3c0167bd680a475516653392a350a8046 /ospfd/ospf_packet.c
parentd699376e2859a99d6ac00cb710a6404e1a430898 (diff)
downloadquagga-2fd2f99d820af4d5a81e2039c99d48c508bf2913.tar.bz2
quagga-2fd2f99d820af4d5a81e2039c99d48c508bf2913.tar.xz
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/ospf_packet.c')
-rw-r--r--ospfd/ospf_packet.c10
1 files changed, 7 insertions, 3 deletions
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;