pike.git / src / block_allocator.c

version» Context lines:

pike.git/src/block_allocator.c:294:       for (i = a->size-1, l = ba_get_layout(a, i); i >= 0; i--, ba_half_layout(&l)) {    if (BA_CHECK_PTR(l, a->pages[i], ptr)) {    a->last_free = i;    p = a->pages[i];    break;    }    }   found:    - #ifdef PIKE_DEBUG +     if (p) { - #endif -  { +     struct ba_block_header * b = (struct ba_block_header*)ptr;   #ifdef PIKE_DEBUG    if (!p->h.used) {    print_allocator(a);    Pike_fatal("freeing from empty page %p\n", p);    }    ba_check_ptr(a, a->last_free, ptr, NULL, __LINE__);   #endif    b->next = p->h.first;    p->h.first = b;    p->h.flags = 0;    if (!(--p->h.used)) {    if (i+1 == a->size) {    ba_free_empty_pages(a);    } else {    ba_clear_page(a, p, &l);    }    } -  } - #ifdef PIKE_DEBUG +     } else { -  + #ifdef PIKE_DEBUG    print_allocator(a); -  + #endif    Pike_fatal("ptr %p not in any page.\n", ptr);    } - #endif +     PIKE_MEMPOOL_FREE(a, ptr, a->l.block_size);   }      #ifdef PIKE_DEBUG   static void print_allocator(const struct block_allocator * a) {    int i;    struct ba_layout l;       for (i = a->size-1, l = ba_get_layout(a, i); i >= 0; ba_half_layout(&l), i--) {    struct ba_page * p = a->pages[i];