Inline void RetireElem(struct db_cache *Cursor) { assert(Cursor->prev); assert(Cursor->lru_prev); if (Cursor->lru_next) { Cursor->lru_prev->lru_next = Cursor->lru_next; Cursor->lru_next->lru_prev = Cursor->lru_prev; } else { /* no lru_next: we are tail! */ assert(Cursor == lru_tail); Cursor->lru_prev->lru_next = NULL; lru_tail = Cursor->lru_prev; } if (Cursor->next) { Cursor->prev->next = Cursor->next; Cursor->next->prev = Cursor->prev; } else Cursor->prev->next = NULL; if (Cursor->cbgp) free_cache_bgp_primitives(&Cursor->cbgp); if (Cursor->pnat) free(Cursor->pnat); if (Cursor->pmpls) free(Cursor->pmpls); if (Cursor->pcust) free(Cursor->pcust); free(Cursor); }
void free_extra_allocs() { struct acc *acc_elem = NULL; unsigned char *elem; int following_chain = FALSE; unsigned int idx; elem = (unsigned char *) a; for (idx = 0; idx < config.buckets; idx++) { if (!following_chain) acc_elem = (struct acc *) elem; if (acc_elem->cbgp) free_cache_bgp_primitives(&acc_elem->cbgp); if (acc_elem->pnat) { free(acc_elem->pnat); acc_elem->pnat = NULL; } if (acc_elem->pmpls) { free(acc_elem->pmpls); acc_elem->pmpls = NULL; } if (acc_elem->pcust) { free(acc_elem->pcust); acc_elem->pcust = NULL; } if (acc_elem->pvlen) { free(acc_elem->pvlen); acc_elem->pvlen= NULL; } if (acc_elem->next) { acc_elem = acc_elem->next; following_chain++; idx--; } else { elem += sizeof(struct acc); following_chain = FALSE; } } }