Changeset 38504
- Timestamp:
- Jun 20, 2015, 1:27:10 PM (11 years ago)
- Location:
- branches/eam_branches/ipp-20150616/Ohana/src/libohana
- Files:
-
- 2 edited
-
include/ohana_allocate.h (modified) (1 diff)
-
src/ohana_allocate.c (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20150616/Ohana/src/libohana/include/ohana_allocate.h
r38491 r38504 1 1 # ifndef OHANA_ALLOCATE 2 2 # define OHANA_ALLOCATE 3 4 # define OHANA_MEMMAGIC (uint32_t) 0xdeadbeef 5 6 typedef struct OhanaMemblock { 7 uint32_t startblock; // endpost marker 8 struct OhanaMemblock *prevBlock; // previously allocated memory 9 struct OhanaMemblock *nextBlock; // next allocated memory 10 size_t size; // size of memory 11 const char *file; // file (re)allocated 12 const char *func; // func (re)allocated 13 int line; // line (re)allocated 14 int freed; // memory has been freed 15 int dummy; // need to put endblock on the endpost 16 uint32_t endblock; // endpost marker 17 } OhanaMemblock; 3 18 4 19 typedef struct { -
branches/eam_branches/ipp-20150616/Ohana/src/libohana/src/ohana_allocate.c
r38491 r38504 6 6 # include <string.h> 7 7 8 # define TEST_SAVE_FREE_BLOCKS 19 # define TEST_SAVE_DROP_BLOCKS 18 # define TEST_SAVE_FREE_BLOCKS 0 9 # define TEST_SAVE_DROP_BLOCKS 0 10 10 11 11 # undef OHANA_MEMORY … … 17 17 # define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) 18 18 19 # define OHANA_MEMMAGIC (uint32_t) 0xdeadbeef 20 21 typedef struct Memblock { 22 uint32_t startblock; // endpost marker 23 struct Memblock *prevBlock; // previously allocated memory 24 struct Memblock *nextBlock; // next allocated memory 25 size_t size; // size of memory 26 const char *file; // file (re)allocated 27 const char *func; // func (re)allocated 28 int line; // line (re)allocated 29 int freed; // memory has been freed 30 int dummy; // need to put endblock on the endpost 31 uint32_t endblock; // endpost marker 32 } Memblock; 33 34 static Memblock *lastBlock = NULL; 19 static OhanaMemblock *lastBlock = NULL; 35 20 36 21 # if (TEST_SAVE_FREE_BLOCKS) 37 static Memblock *freeBlock = NULL;22 static OhanaMemblock *freeBlock = NULL; 38 23 # endif 39 24 40 25 # if (TEST_SAVE_DROP_BLOCKS) 41 static Memblock *dropBlock = NULL;26 static OhanaMemblock *dropBlock = NULL; 42 27 # endif 43 28 … … 60 45 61 46 void *ptr; // actual user memory allocated 62 Memblock *new; // new memblock created to track the user memory47 OhanaMemblock *new; // new memblock created to track the user memory 63 48 size_t size; // total number of bytes requested (not items) 64 49 … … 67 52 68 53 // total size is : memblock + data + endpost 69 new = ( Memblock *) malloc (sizeof(Memblock) + size + sizeof(void *));54 new = (OhanaMemblock *) malloc (sizeof(OhanaMemblock) + size + sizeof(void *)); 70 55 if (new == NULL) ohana_memabort ("failed to allocate memory (%s, %d, %s)\n", file, line, func); 71 56 … … 117 102 void *ohana_realloc (const char *file, int line, const char *func, void *in, size_t Nelem, size_t esize) { 118 103 119 Memblock *old; // original memblock associated with user memory120 Memblock *new; // new memblock associated with user memory104 OhanaMemblock *old; // original memblock associated with user memory 105 OhanaMemblock *new; // new memblock associated with user memory 121 106 size_t size; 122 107 … … 128 113 129 114 // memblock of supplied pointer 130 old = ( Memblock *) in - 1;115 old = (OhanaMemblock *) in - 1; 131 116 132 117 if (old->startblock != OHANA_MEMMAGIC) ohana_memabort ("corrupt memory (%s, %d, %s)\n", file, line, func); … … 143 128 pthread_mutex_lock(&memBlockListMutex); 144 129 145 Memblock *nextBlock = old->nextBlock;146 Memblock *prevBlock = old->prevBlock;130 OhanaMemblock *nextBlock = old->nextBlock; 131 OhanaMemblock *prevBlock = old->prevBlock; 147 132 148 133 int isLast = (old == lastBlock); … … 153 138 // XXX for a test, we are going to always alloc a new block, copy the old data to the new block 154 139 // poison the old block, then free it 155 new = ( Memblock *) malloc (sizeof(Memblock) + size + sizeof(void *));140 new = (OhanaMemblock *) malloc (sizeof(OhanaMemblock) + size + sizeof(void *)); 156 141 if (new == NULL) ohana_memabort ("failed to reallocate memory (%s, %d, %s)\n", file, line, func); 157 142 void *ptr_new = (char *) (new + 1); … … 165 150 // ask for new memory 166 151 // total size is : memblock + data + endpost 167 new = ( Memblock *) realloc (old, sizeof(Memblock) + size + sizeof(void *));152 new = (OhanaMemblock *) realloc (old, sizeof(OhanaMemblock) + size + sizeof(void *)); 168 153 if (new == NULL) ohana_memabort ("failed to reallocate memory (%s, %d, %s)\n", file, line, func); 169 154 void *ptr_new = (char *) (new + 1); … … 223 208 void ohana_free (const char *file, int line, const char *func, void *in) { 224 209 225 Memblock *ref;210 OhanaMemblock *ref; 226 211 227 212 if (!in) return; … … 229 214 // fprintf (stderr, "free %zx\n", (size_t) in); 230 215 231 ref = ( Memblock *) in - 1;216 ref = (OhanaMemblock *) in - 1; 232 217 233 218 if (ref->freed) ohana_memabort ("memory already freed (%s, %d, %s [%d bytes])\n", ref->file, ref->line, ref->func, ref->size); … … 239 224 pthread_mutex_lock(&memBlockListMutex); 240 225 241 Memblock *nextBlock = ref->nextBlock;242 Memblock *prevBlock = ref->prevBlock;226 OhanaMemblock *nextBlock = ref->nextBlock; 227 OhanaMemblock *prevBlock = ref->prevBlock; 243 228 244 229 // remove this memBlock from the list … … 284 269 if (!lastBlock) { 285 270 fprintf (stderr, "no memory allocated\n"); 286 return TRUE; 287 } 288 289 Memblock *thisBlock = lastBlock; 271 } 272 273 OhanaMemblock *thisBlock = lastBlock; 290 274 291 275 size_t Ngood = 0; … … 435 419 } 436 420 437 Memblock *thisBlock = lastBlock;421 OhanaMemblock *thisBlock = lastBlock; 438 422 439 423 size_t Ntotal = 0; … … 483 467 memstats.Nbad = 0; 484 468 485 Memblock *thisBlock = lastBlock;469 OhanaMemblock *thisBlock = lastBlock; 486 470 487 471 while (thisBlock) {
Note:
See TracChangeset
for help on using the changeset viewer.
