mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-02 20:27:14 +00:00
Merge pull request #4685 from chiragshah6/ospf_vrf_dev
ospfd: no router ospf crash fix
This commit is contained in:
commit
a04686849f
@ -660,6 +660,14 @@ static int ospf_write(struct thread *thread)
|
||||
struct in_pktinfo *pi;
|
||||
#endif
|
||||
|
||||
if (ospf->fd < 0 || ospf->oi_running == 0) {
|
||||
if (IS_DEBUG_OSPF_EVENT)
|
||||
zlog_debug(
|
||||
"ospf_write failed to send, fd %d, instance %u"
|
||||
,ospf->fd, ospf->oi_running);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ospf->t_write = NULL;
|
||||
|
||||
node = listhead(ospf->oi_write_q);
|
||||
|
@ -656,6 +656,7 @@ static void ospf_finish_final(struct ospf *ospf)
|
||||
for (ALL_LIST_ELEMENTS(ospf->oiflist, node, nnode, oi))
|
||||
ospf_if_free(oi);
|
||||
list_delete(&ospf->oiflist);
|
||||
ospf->oi_running = 0;
|
||||
|
||||
/* De-Register VRF */
|
||||
ospf_zebra_vrf_deregister(ospf);
|
||||
@ -699,6 +700,8 @@ static void ospf_finish_final(struct ospf *ospf)
|
||||
}
|
||||
|
||||
/* Cancel all timers. */
|
||||
OSPF_TIMER_OFF(ospf->t_read);
|
||||
OSPF_TIMER_OFF(ospf->t_write);
|
||||
OSPF_TIMER_OFF(ospf->t_external_lsa);
|
||||
OSPF_TIMER_OFF(ospf->t_spf_calc);
|
||||
OSPF_TIMER_OFF(ospf->t_ase_calc);
|
||||
@ -708,14 +711,9 @@ static void ospf_finish_final(struct ospf *ospf)
|
||||
OSPF_TIMER_OFF(ospf->t_asbr_check);
|
||||
OSPF_TIMER_OFF(ospf->t_distribute_update);
|
||||
OSPF_TIMER_OFF(ospf->t_lsa_refresher);
|
||||
OSPF_TIMER_OFF(ospf->t_read);
|
||||
OSPF_TIMER_OFF(ospf->t_write);
|
||||
OSPF_TIMER_OFF(ospf->t_opaque_lsa_self);
|
||||
OSPF_TIMER_OFF(ospf->t_sr_update);
|
||||
|
||||
close(ospf->fd);
|
||||
stream_free(ospf->ibuf);
|
||||
|
||||
LSDB_LOOP (OPAQUE_AS_LSDB(ospf), rn, lsa)
|
||||
ospf_discard_from_db(ospf, ospf->lsdb, lsa);
|
||||
LSDB_LOOP (EXTERNAL_LSDB(ospf), rn, lsa)
|
||||
@ -755,9 +753,6 @@ static void ospf_finish_final(struct ospf *ospf)
|
||||
ospf_ase_external_lsas_finish(ospf->external_lsas);
|
||||
}
|
||||
|
||||
list_delete(&ospf->areas);
|
||||
list_delete(&ospf->oi_write_q);
|
||||
|
||||
for (i = ZEBRA_ROUTE_SYSTEM; i <= ZEBRA_ROUTE_MAX; i++) {
|
||||
struct list *ext_list;
|
||||
struct ospf_external *ext;
|
||||
@ -789,6 +784,12 @@ static void ospf_finish_final(struct ospf *ospf)
|
||||
if (!CHECK_FLAG(om->options, OSPF_MASTER_SHUTDOWN))
|
||||
instance = ospf->instance;
|
||||
|
||||
list_delete(&ospf->areas);
|
||||
list_delete(&ospf->oi_write_q);
|
||||
|
||||
close(ospf->fd);
|
||||
stream_free(ospf->ibuf);
|
||||
ospf->fd = -1;
|
||||
ospf_delete(ospf);
|
||||
|
||||
if (ospf->name) {
|
||||
|
Loading…
Reference in New Issue
Block a user