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

Reply via email to