Really free attributes.

This commit is contained in:
Martin Mares 2000-05-08 13:12:14 +00:00
parent 818ff1e2b7
commit 5d86aefb6c

View file

@ -239,6 +239,16 @@ ea_list_copy(ea_list *o)
return n; return n;
} }
static inline void
ea_free(ea_list *o)
{
if (o)
{
ASSERT(!o->next);
mb_free(o);
}
}
void void
ea_format(eattr *e, byte *buf) ea_format(eattr *e, byte *buf)
{ {
@ -407,8 +417,7 @@ static rta **rta_hash_table;
static void static void
rta_alloc_hash(void) rta_alloc_hash(void)
{ {
rta_hash_table = mb_alloc(rta_pool, sizeof(rta *) * rta_cache_size); rta_hash_table = mb_allocz(rta_pool, sizeof(rta *) * rta_cache_size);
bzero(rta_hash_table, sizeof(rta *) * rta_cache_size);
if (rta_cache_size < 32768) if (rta_cache_size < 32768)
rta_cache_limit = rta_cache_size * 2; rta_cache_limit = rta_cache_size * 2;
else else
@ -518,6 +527,12 @@ rta__free(rta *a)
{ {
ASSERT(rta_cache_count && (a->aflags & RTAF_CACHED)); ASSERT(rta_cache_count && (a->aflags & RTAF_CACHED));
rta_cache_count--; rta_cache_count--;
*a->pprev = a->next;
if (a->next)
a->next->pprev = a->pprev;
a->aflags = 0; /* Poison the entry */
ea_free(a->eattrs);
sl_free(rta_slab, a);
} }
void void