diff options
author | paul <paul> | 2005-05-11 18:09:59 +0000 |
---|---|---|
committer | paul <paul> | 2005-05-11 18:09:59 +0000 |
commit | 69310a679aef2b532f6851298b453eb7ca4d3534 (patch) | |
tree | 1c6a2f3520b0253ae7db42c776e69507c53192ef /ospfd/ospf_lsa.c | |
parent | d4e47287efd60f77b473f8d5677e4dac08c192b0 (diff) |
2005-05-11 Paul Jakma <paul.jakma@sun.com>
* (general) Fix memory leaks in opaque AS-scope LSAs, reported and
with much debugging done by by scott collins <scollins@agile.tv>.
(possible backport candidate?)
* ospf_lsa.c: (ospf_discard_from_db) dont call
ospf_ase_unregister_external_lsa for opaque-lsa's, opaques are
never registered with ase in the first place.
* ospf_packet.c: (general) Disabuse opaque related code of its
tendency to try gather up things into temporary lists.
(ospf_ls_upd) remove the temporary lists opaque uses, call
opaque functions inline, just like all other types.
(ospf_ls_ack) ditto.
(ospf_recv_packet) fixup sign warning.
* ospf_opaque.c: (general) fix the unneeded use of lists, and
untwist some of the logic.
(ospf_opaque_self_originated_lsa_received) take a single LSA
as argument, not a list of them. Remove the list loop. Logic
otherwise unchanged.
(ospf_opaque_ls_ack_received) Mostly ditto. But untwist the logic,
move the actions up into the switch block, remove the goto's and
sanitise the logic near the end a bit.
* ospf_opaque.h: Adjust definitions of aforementioned functions
in ospf_opaque.c to match.
Diffstat (limited to 'ospfd/ospf_lsa.c')
-rw-r--r-- | ospfd/ospf_lsa.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/ospfd/ospf_lsa.c b/ospfd/ospf_lsa.c index e6c7fdc3..708fa1c5 100644 --- a/ospfd/ospf_lsa.c +++ b/ospfd/ospf_lsa.c @@ -2523,12 +2523,14 @@ ospf_discard_from_db (struct ospf *ospf, switch (old->data->type) { case OSPF_AS_EXTERNAL_LSA: + ospf_ase_unregister_external_lsa (old, ospf); + ospf_ls_retransmit_delete_nbr_as (ospf, old); + break; #ifdef HAVE_OPAQUE_LSA case OSPF_OPAQUE_AS_LSA: -#endif /* HAVE_OPAQUE_LSA */ ospf_ls_retransmit_delete_nbr_as (ospf, old); - ospf_ase_unregister_external_lsa (old, ospf); break; +#endif /* HAVE_OPAQUE_LSA */ case OSPF_AS_NSSA_LSA: ospf_ls_retransmit_delete_nbr_area (old->area, old); ospf_ase_unregister_external_lsa (old, ospf); |