Add resetMemoryContext()
authorteodor <teodor>
Thu, 18 Sep 2008 09:45:55 +0000 (09:45 +0000)
committerteodor <teodor>
Thu, 18 Sep 2008 09:45:55 +0000 (09:45 +0000)
tmalloc.c
tmalloc.h

index 9f96ab9..c03a7ff 100644 (file)
--- a/tmalloc.c
+++ b/tmalloc.c
@@ -161,6 +161,25 @@ freeMemoryContext(MemoryContext *cntx) {
        }
 }
 
+void
+resetMemoryContext(MemoryContext *cntx) {
+       MemoryChunk *chunk, *chunkptr;
+
+       while( cntx ) {
+               chunkptr = cntx->chunk;
+               chunkptr->freesize = chunkptr->size;
+               chunkptr = chunkptr->next;
+               cntx->chunk->next = NULL;
+
+               while( chunkptr ) {
+                       chunk=chunkptr->next;
+                       tfree(chunkptr);
+                       chunkptr=chunk;
+               }
+               cntx=cntx->child;
+       }
+}
+
 void*   
 mcalloc(MemoryContext *cntx, size_t size) {
        MemoryChunk     *chunk = cntx->chunk;
index 67069eb..4cb0a0b 100644 (file)
--- a/tmalloc.h
+++ b/tmalloc.h
@@ -77,6 +77,7 @@ typedef struct {
 
 MemoryContext *allocMemoryContext(MemoryContext* parent, int flags);
 void freeMemoryContext(MemoryContext* cntx);
+void resetMemoryContext(MemoryContext* cntx);
 void*   mcalloc(MemoryContext *cntx, size_t size);
 void*   mc0alloc(MemoryContext *cntx, size_t size);
 void*   mcrealloc(void * ptr, size_t size);