Skip to content

Commit

Permalink
Merge pull request #4685 from chiragshah6/ospf_vrf_dev
Browse files Browse the repository at this point in the history
ospfd: no router ospf crash fix
  • Loading branch information
riw777 authored Jul 16, 2019
2 parents daba7c0 + c32eba0 commit a046868
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 deletions.
8 changes: 8 additions & 0 deletions ospfd/ospf_packet.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
17 changes: 9 additions & 8 deletions ospfd/ospfd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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)
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit a046868

Please sign in to comment.