Really free attributes.
This commit is contained in:
parent
818ff1e2b7
commit
5d86aefb6c
1 changed files with 17 additions and 2 deletions
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue