Example #1
0
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);
}
Example #2
0
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;
    }
  }
}