Example #1
0
void
free_mapping(struct mapping *m)
{
    short i;

    if (!m->ref || --m->ref > 0)
	return;
    for (i = 0; i < m->size; i++)
	m->card -= free_apairs(m->pairs[i]);
    num_mappings--;
    total_mapping_size -= (sizeof(struct apair *) * m->size + 
			   sizeof(struct mapping));
    free((char *)m->pairs);
    free((char *)m);
}
Example #2
0
void
mem_mapping(struct mapping *m)
{
    struct apair **p;
    int i;
    int size;

    if (m->size < 0)
	return;
    size = m->size;
    m->size = -1;
    for (i = 0 ; i < size ; i++)
    {
        for(p = &m->pairs[i]; *p; )
        {
	    /* Check for destructed objects while we'r at it :) */
	    if ((*p)->arg.type == T_OBJECT &&
		((*p)->arg.u.ob->flags & O_DESTRUCTED))
	    {
		struct apair *f;

		f = *p;
		*p = f->next;
		f->next = 0;
		m->card -= free_apairs(f);
		mapping_elem--;
	    }
	    else
	    {
		mem_incr(&(*p)->arg);
		mem_incr(&(*p)->val);
		p = &(*p)->next;
	    }
        }
    }
    m->size = size;
}