suba               67 core/suba.c    check_cell(const allocator *suba, cell* c, char *fn, int ln)
suba               69 core/suba.c    	if (suba && (c > (cell*)suba) && (c < (cell*)((char*)suba + suba->size))) {
suba               75 core/suba.c    	sprintf(buf, "%s bad cell - %x %x", fn, c, suba);
suba               85 core/suba.c    void suba_dump(allocator *suba)
suba               87 core/suba.c        cell *c = &suba->head;
suba               88 core/suba.c        printf("%x %d => ", c, suba->mincell);
suba               97 core/suba.c    int check_stats(allocator *suba)
suba               99 core/suba.c        if (!TakeSemaphore(suba->sem_id, SUBA_SEMAPHORE_TIMEOUT))
suba              103 core/suba.c            cell* largest = &suba->head;
suba              104 core/suba.c            cell* c = check_cell(suba, &suba->head, "suba_getmeminfo", __LINE__);
suba              110 core/suba.c                c = check_cell(suba, c->next, "suba_getmeminfo", __LINE__);
suba              113 core/suba.c            if (suba->largest_block == NULL)
suba              114 core/suba.c                suba->largest_block = largest;
suba              117 core/suba.c            if (suba->largest_block->h.size != largest->h.size)
suba              119 core/suba.c                printf("Mismatch - largest %x %d %x %d\n", suba->largest_block, suba->largest_block->h.size, largest->h.size);
suba              122 core/suba.c            if (suba->free_size != free_size)
suba              127 core/suba.c            if (suba->free_block_count != count)
suba              133 core/suba.c            GiveSemaphore(suba->sem_id);
suba              146 core/suba.c    void suba_dump(allocator *suba)
suba              150 core/suba.c        cell *c = &suba->head;
suba              151 core/suba.c        sprintf(buf, "%x %d %x %d =>\n", c, suba->mincell, suba->largest_block, suba->largest_block->h.size);
suba              164 core/suba.c    void check_stats(allocator *suba)
suba              168 core/suba.c        cell* largest = &suba->head;
suba              169 core/suba.c        cell* c = check_cell(suba, &suba->head, "check_stats", __LINE__);
suba              175 core/suba.c            c = check_cell(suba, c->next, "check_stats", __LINE__);
suba              180 core/suba.c        if (suba->largest_block->h.size != largest->h.size)
suba              182 core/suba.c            suba_dump(suba);
suba              183 core/suba.c            sprintf(buf, "largest %x %d %x %d\n", suba->largest_block, suba->largest_block->h.size, largest, largest->h.size);
suba              186 core/suba.c        if (suba->free_size != free_size)
suba              188 core/suba.c            suba_dump(suba);
suba              189 core/suba.c            sprintf(buf, "free_size %d %d\n", suba->free_size, free_size);
suba              192 core/suba.c        if (suba->free_block_count != count)
suba              194 core/suba.c            suba_dump(suba);
suba              195 core/suba.c            sprintf(buf, "free_count %d %d\n", suba->free_block_count, count);
suba              202 core/suba.c    suba_getmeminfo(allocator *suba, int *allocated_size, int *allocated_peak, int *allocated_count, int *free_size, int *largest_block, int *free_block_count)
suba              204 core/suba.c        if (!TakeSemaphore(suba->sem_id, SUBA_SEMAPHORE_TIMEOUT))
suba              206 core/suba.c            if (suba->magic != SUBA_MAGIC || *suba->magic2 != SUBA_MAGIC)
suba              210 core/suba.c            if (suba->largest_block == NULL)
suba              212 core/suba.c                cell* largest = &suba->head;
suba              213 core/suba.c                cell* c = check_cell(suba, &suba->head, "suba_getmeminfo", __LINE__);
suba              217 core/suba.c                    c = check_cell(suba, c->next, "suba_getmeminfo", __LINE__);
suba              219 core/suba.c                suba->largest_block = largest;
suba              222 core/suba.c            *largest_block = ALLOCSIZE(suba->largest_block->h.size);
suba              223 core/suba.c            *free_size = suba->free_size;
suba              224 core/suba.c            *free_block_count = suba->free_block_count;
suba              226 core/suba.c            *allocated_size = suba->allocated_size;
suba              227 core/suba.c            *allocated_peak = suba->allocated_peak;
suba              228 core/suba.c            *allocated_count = suba->allocated_count;
suba              231 core/suba.c            check_stats(suba);
suba              234 core/suba.c            GiveSemaphore(suba->sem_id);
suba              243 core/suba.c    suba_init(allocator *suba, size_t size, size_t mincell, char *name)
suba              248 core/suba.c    	if (suba == NULL || size == 0) {
suba              259 core/suba.c        memset(suba, 0, hdrsiz);
suba              260 core/suba.c        suba->magic = SUBA_MAGIC;
suba              262 core/suba.c        suba->mincell = sizeof(cell);
suba              263 core/suba.c        if (mincell > suba->mincell)
suba              264 core/suba.c            suba->mincell = mincell;
suba              265 core/suba.c        suba->size = size;
suba              266 core/suba.c        suba->sem_id = CreateBinarySemaphore(name, 1);
suba              272 core/suba.c        c1 = (cell*)((void*)suba + hdrsiz);
suba              287 core/suba.c        suba->magic2 = (unsigned int*)CEND(c1);
suba              288 core/suba.c        *suba->magic2 = SUBA_MAGIC;
suba              291 core/suba.c        suba->free_block_count = 1;
suba              292 core/suba.c        suba->free_size = ALLOCSIZE(c1->h.size);
suba              293 core/suba.c        suba->largest_block = c1;
suba              296 core/suba.c        suba->head.h.size = sizeof(cell_hdr);
suba              297 core/suba.c        suba->head.h.magic = CELL_MAGIC;
suba              298 core/suba.c        suba->head.next = c1;
suba              300 core/suba.c    	return suba;
suba              304 core/suba.c    suba_alloc(allocator *suba, size_t size, int zero)
suba              311 core/suba.c        if (cellsize < suba->mincell) cellsize = suba->mincell;
suba              313 core/suba.c    	if (!TakeSemaphore(suba->sem_id, SUBA_SEMAPHORE_TIMEOUT))
suba              316 core/suba.c    	    cell *prev_cell = &suba->head;
suba              317 core/suba.c            this_cell = check_cell(suba, prev_cell->next, "suba_alloc", __LINE__);
suba              320 core/suba.c                this_cell = check_cell(suba, this_cell->next, "suba_alloc", __LINE__);
suba              325 core/suba.c                if (this_cell == suba->largest_block)
suba              326 core/suba.c                    suba->largest_block = NULL;     // Force recalculation of largest block in suba_getmeminfo
suba              328 core/suba.c                if (this_cell->h.size > (cellsize + suba->mincell)) {
suba              334 core/suba.c                    suba->free_size -= cellsize;
suba              339 core/suba.c                    suba->free_block_count -= 1;
suba              340 core/suba.c                    suba->free_size -= ALLOCSIZE(cellsize);
suba              344 core/suba.c                suba->allocated_size += ALLOCSIZE(cellsize);
suba              345 core/suba.c                suba->allocated_count++;
suba              346 core/suba.c                if(suba->allocated_size > suba->allocated_peak) {
suba              347 core/suba.c                    suba->allocated_peak = suba->allocated_size;
suba              353 core/suba.c            GiveSemaphore(suba->sem_id);
suba              372 core/suba.c    suba_free(allocator *suba, void *ptr)
suba              378 core/suba.c        check_cell(suba, this_cell, "suba_free", __LINE__);
suba              379 core/suba.c        if (this_cell->h.size > suba->size) {
suba              385 core/suba.c        if (!TakeSemaphore(suba->sem_id, SUBA_SEMAPHORE_TIMEOUT))
suba              388 core/suba.c            suba->allocated_size -= ALLOCSIZE(this_cell->h.size);
suba              389 core/suba.c            suba->allocated_count--;
suba              392 core/suba.c            cell* prev_cell = &suba->head;
suba              396 core/suba.c                prev_cell = check_cell(suba, prev_cell->next, "suba_free", __LINE__);
suba              398 core/suba.c            cell* next_cell = check_cell(suba, prev_cell->next, "suba_free", __LINE__);
suba              402 core/suba.c                suba->free_size += this_cell->h.size;
suba              408 core/suba.c                suba->free_block_count += 1;
suba              409 core/suba.c                suba->free_size += ALLOCSIZE(this_cell->h.size);
suba              416 core/suba.c                suba->free_block_count -= 1;
suba              417 core/suba.c                suba->free_size += sizeof(cell_hdr);
suba              421 core/suba.c            if ((suba->largest_block != NULL) && (this_cell->h.size > suba->largest_block->h.size))
suba              422 core/suba.c                suba->largest_block = this_cell;
suba              424 core/suba.c            GiveSemaphore(suba->sem_id);