Changeset: b7be015fa060 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/b7be015fa060 Modified Files: gdk/gdk.h gdk/gdk_utils.c Branch: resource_management Log Message:
keep track of allocated/freed objects diffs (88 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -597,11 +597,13 @@ gdk_export _Noreturn void eb_error(excep typedef struct allocator { struct allocator *pa; - size_t size; - size_t nr; + size_t size; /* size of the allocator in terms of blocks */ + size_t nr; /* number of blocks allocated */ char **blks; size_t used; /* memory used in last block */ size_t usedmem; /* used memory */ + size_t objects; /* number of objects */ + size_t inuse; /* number of objects in use*/ void *freelist; /* list of freed objects */ void *freelist_blks; /* list of freed blks */ diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -2099,6 +2099,7 @@ sa_free_obj(allocator *pa, void *obj, si assert(sz > 0); assert(!pa->pa); // must be root allocator size_t i; + char *obj_start = (char *) obj; char *obj_end = obj_start + sz; @@ -2115,6 +2116,8 @@ sa_free_obj(allocator *pa, void *obj, si f->n = pa->freelist; f->sz = sz; pa->freelist = f; + if (pa->inuse > 0) + pa->inuse -= 1; } static void @@ -2155,7 +2158,12 @@ sa_use_freed_obj(allocator *pa, size_t s return sa_use_freed_obj(pa->pa, sz); freed_t *prev = NULL; freed_t *curr = pa->freelist; - while(curr) { + // size_t objects = pa->objects; + // size_t inuse = pa->inuse; + // size_t nr_free_objects = objects - inuse; + int MAX_ITERATIONS = 100; + int cntr = 0; + while(curr && (cntr <= MAX_ITERATIONS)) { if (sz == curr->sz) { if (prev) { prev->n = curr->n; @@ -2167,6 +2175,7 @@ sa_use_freed_obj(allocator *pa, size_t s prev = curr; curr = curr->n; } + cntr += 1; } return NULL; } @@ -2224,6 +2233,8 @@ sa_create(allocator *pa) return NULL; } sa->used = 0; + sa->objects = 0; + sa->inuse = 0; sa->tmp_active = 0; sa->tmp_used = 0; return sa; @@ -2242,6 +2253,8 @@ allocator *sa_reset( allocator *sa ) sa->nr = 1; sa->used = 0; sa->usedmem = SA_BLOCK_SIZE; + sa->objects = 0; + sa->inuse = 0; return sa; } @@ -2316,6 +2329,8 @@ sa_alloc( allocator *sa, size_t sz ) r = sa->blks[sa->nr-1] + sa->used; sa->used += sz; } + sa->objects += 1; + sa->inuse += 1; return r; } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org