diff options
Diffstat (limited to 'isisd')
-rw-r--r-- | isisd/ChangeLog | 5 | ||||
-rw-r--r-- | isisd/isis_lsp.c | 11 |
2 files changed, 11 insertions, 5 deletions
diff --git a/isisd/ChangeLog b/isisd/ChangeLog index 6a2be940..d9e65bbd 100644 --- a/isisd/ChangeLog +++ b/isisd/ChangeLog @@ -1,3 +1,8 @@ +2005-09-18 Hasso Tepper <hasso at quagga.net> + + * isis_lsp.c (lsp_update): Fix previous commit - manipulate the right + database and only if LSP is really in the database (sanity check). + 2005-09-16 Hasso Tepper <hasso at quagga.net> * isis_lsp.c (lsp_update): Remove LSP from database before updating diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c index d147c650..a294bc8f 100644 --- a/isisd/isis_lsp.c +++ b/isisd/isis_lsp.c @@ -418,11 +418,12 @@ void lsp_update (struct isis_lsp *lsp, struct isis_link_state_hdr *lsp_hdr, struct stream *stream, struct isis_area *area, int level) { - dnode_t *dnode; + dnode_t *dnode = NULL; /* Remove old LSP from LSP database. */ - dnode = dict_lookup (area->lspdb[level], lsp->lsp_header->lsp_id); - dnode_destroy (dict_delete (area->lspdb[level], dnode)); + dnode = dict_lookup (area->lspdb[level - 1], lsp->lsp_header->lsp_id); + if (dnode) + dnode_destroy (dict_delete (area->lspdb[level - 1], dnode)); /* free the old lsp data */ XFREE (MTYPE_STREAM_DATA, lsp->pdu); @@ -434,8 +435,8 @@ lsp_update (struct isis_lsp *lsp, struct isis_link_state_hdr *lsp_hdr, /* set the new values for lsp header */ memcpy (lsp->lsp_header, lsp_hdr, ISIS_LSP_HDR_LEN); - /* Put LSP back into LSP database, now with updated data. */ - lsp_insert (lsp, area->lspdb[level]); + if (dnode) + lsp_insert (lsp, area->lspdb[level - 1]); } /* creation of LSP directly from what we received */ |