suba               69 core/suba.c    check_cell(const allocator *suba, cell* c, char *fn, int ln)
suba               71 core/suba.c        if (suba && (c > (cell*)suba) && (c < (cell*)((char*)suba + suba->size))) {
suba               77 core/suba.c        sprintf(buf, "%s bad cell - %x %x", fn, c, suba);
suba               87 core/suba.c    void suba_dump(allocator *suba)
suba               89 core/suba.c        cell *c = &suba->head;
suba               90 core/suba.c        printf("%x %d => ", c, suba->mincell);
suba               99 core/suba.c    int check_stats(allocator *suba)
suba              101 core/suba.c        if (!TakeSemaphore(suba->sem_id, SUBA_SEMAPHORE_TIMEOUT))
suba              105 core/suba.c            cell* largest = &suba->head;
suba              106 core/suba.c            cell* c = check_cell(suba, &suba->head, "suba_getmeminfo", __LINE__);
suba              112 core/suba.c                c = check_cell(suba, c->next, "suba_getmeminfo", __LINE__);
suba              115 core/suba.c            if (suba->largest_block == NULL)
suba              116 core/suba.c                suba->largest_block = largest;
suba              119 core/suba.c            if (suba->largest_block->h.size != largest->h.size)
suba              121 core/suba.c                printf("Mismatch - largest %x %d %x %d\n", suba->largest_block, suba->largest_block->h.size, largest->h.size);
suba              124 core/suba.c            if (suba->free_size != free_size)
suba              129 core/suba.c            if (suba->free_block_count != count)
suba              135 core/suba.c            GiveSemaphore(suba->sem_id);
suba              148 core/suba.c    void suba_dump(allocator *suba)
suba              152 core/suba.c        cell *c = &suba->head;
suba              153 core/suba.c        sprintf(buf, "%x %d %x %d =>\n", c, suba->mincell, suba->largest_block, suba->largest_block->h.size);
suba              166 core/suba.c    void check_stats(allocator *suba)
suba              170 core/suba.c        cell* largest = &suba->head;
suba              171 core/suba.c        cell* c = check_cell(suba, &suba->head, "check_stats", __LINE__);
suba              177 core/suba.c            c = check_cell(suba, c->next, "check_stats", __LINE__);
suba              182 core/suba.c        if (suba->largest_block->h.size != largest->h.size)
suba              184 core/suba.c            suba_dump(suba);
suba              185 core/suba.c            sprintf(buf, "largest %x %d %x %d\n", suba->largest_block, suba->largest_block->h.size, largest, largest->h.size);
suba              188 core/suba.c        if (suba->free_size != free_size)
suba              190 core/suba.c            suba_dump(suba);
suba              191 core/suba.c            sprintf(buf, "free_size %d %d\n", suba->free_size, free_size);
suba              194 core/suba.c        if (suba->free_block_count != count)
suba              196 core/suba.c            suba_dump(suba);
suba              197 core/suba.c            sprintf(buf, "free_count %d %d\n", suba->free_block_count, count);
suba              204 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              206 core/suba.c        if (!TakeSemaphore(suba->sem_id, SUBA_SEMAPHORE_TIMEOUT))
suba              208 core/suba.c            if (suba->magic != SUBA_MAGIC || *suba->magic2 != SUBA_MAGIC)
suba              212 core/suba.c            if (suba->largest_block == NULL)
suba              214 core/suba.c                cell* largest = &suba->head;
suba              215 core/suba.c                cell* c = check_cell(suba, &suba->head, "suba_getmeminfo", __LINE__);
suba              219 core/suba.c                    c = check_cell(suba, c->next, "suba_getmeminfo", __LINE__);
suba              221 core/suba.c                suba->largest_block = largest;
suba              224 core/suba.c            *largest_block = ALLOCSIZE(suba->largest_block->h.size);
suba              225 core/suba.c            *free_size = suba->free_size;
suba              226 core/suba.c            *free_block_count = suba->free_block_count;
suba              228 core/suba.c            *allocated_size = suba->allocated_size;
suba              229 core/suba.c            *allocated_peak = suba->allocated_peak;
suba              230 core/suba.c            *allocated_count = suba->allocated_count;
suba              233 core/suba.c            check_stats(suba);
suba              236 core/suba.c            GiveSemaphore(suba->sem_id);
suba              245 core/suba.c    suba_init(allocator *suba, size_t size, size_t mincell, char *name)
suba              250 core/suba.c    	if (suba == NULL || size == 0) {
suba              261 core/suba.c        memset(suba, 0, hdrsiz);
suba              262 core/suba.c        suba->magic = SUBA_MAGIC;
suba              264 core/suba.c        suba->mincell = sizeof(cell);
suba              265 core/suba.c        if (mincell > suba->mincell)
suba              266 core/suba.c            suba->mincell = mincell;
suba              267 core/suba.c        suba->size = size;
suba              268 core/suba.c        suba->sem_id = CreateBinarySemaphore(name, 1);
suba              274 core/suba.c        c1 = (cell*)((void*)suba + hdrsiz);
suba              289 core/suba.c        suba->magic2 = (unsigned int*)CEND(c1);
suba              290 core/suba.c        *suba->magic2 = SUBA_MAGIC;
suba              293 core/suba.c        suba->free_block_count = 1;
suba              294 core/suba.c        suba->free_size = ALLOCSIZE(c1->h.size);
suba              295 core/suba.c        suba->largest_block = c1;
suba              298 core/suba.c        suba->head.h.size = sizeof(cell_hdr);
suba              299 core/suba.c        suba->head.h.magic = CELL_MAGIC;
suba              300 core/suba.c        suba->head.next = c1;
suba              302 core/suba.c    	return suba;
suba              306 core/suba.c    suba_alloc(allocator *suba, size_t size, int zero)
suba              313 core/suba.c        if (cellsize < suba->mincell) cellsize = suba->mincell;
suba              315 core/suba.c    	if (!TakeSemaphore(suba->sem_id, SUBA_SEMAPHORE_TIMEOUT))
suba              318 core/suba.c    	    cell *prev_cell = &suba->head;
suba              319 core/suba.c            this_cell = check_cell(suba, prev_cell->next, "suba_alloc", __LINE__);
suba              322 core/suba.c                this_cell = check_cell(suba, this_cell->next, "suba_alloc", __LINE__);
suba              327 core/suba.c                if (this_cell == suba->largest_block)
suba              328 core/suba.c                    suba->largest_block = NULL;     // Force recalculation of largest block in suba_getmeminfo
suba              330 core/suba.c                if (this_cell->h.size > (cellsize + suba->mincell)) {
suba              336 core/suba.c                    suba->free_size -= cellsize;
suba              341 core/suba.c                    suba->free_block_count -= 1;
suba              342 core/suba.c                    suba->free_size -= ALLOCSIZE(cellsize);
suba              346 core/suba.c                suba->allocated_size += ALLOCSIZE(cellsize);
suba              347 core/suba.c                suba->allocated_count++;
suba              348 core/suba.c                if(suba->allocated_size > suba->allocated_peak) {
suba              349 core/suba.c                    suba->allocated_peak = suba->allocated_size;
suba              355 core/suba.c            GiveSemaphore(suba->sem_id);
suba              374 core/suba.c    suba_free(allocator *suba, void *ptr)
suba              380 core/suba.c        check_cell(suba, this_cell, "suba_free", __LINE__);
suba              381 core/suba.c        if (this_cell->h.size > suba->size) {
suba              387 core/suba.c        if (!TakeSemaphore(suba->sem_id, SUBA_SEMAPHORE_TIMEOUT))
suba              390 core/suba.c            suba->allocated_size -= ALLOCSIZE(this_cell->h.size);
suba              391 core/suba.c            suba->allocated_count--;
suba              394 core/suba.c            cell* prev_cell = &suba->head;
suba              398 core/suba.c                prev_cell = check_cell(suba, prev_cell->next, "suba_free", __LINE__);
suba              400 core/suba.c            cell* next_cell = check_cell(suba, prev_cell->next, "suba_free", __LINE__);
suba              404 core/suba.c                suba->free_size += this_cell->h.size;
suba              410 core/suba.c                suba->free_block_count += 1;
suba              411 core/suba.c                suba->free_size += ALLOCSIZE(this_cell->h.size);
suba              418 core/suba.c                suba->free_block_count -= 1;
suba              419 core/suba.c                suba->free_size += sizeof(cell_hdr);
suba              423 core/suba.c            if ((suba->largest_block != NULL) && (this_cell->h.size > suba->largest_block->h.size))
suba              424 core/suba.c                suba->largest_block = this_cell;
suba              426 core/suba.c            GiveSemaphore(suba->sem_id);