Changeset 1204 for trunk/psLib/src/sysUtils/psMemory.c
- Timestamp:
- Jul 8, 2004, 4:45:42 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/sysUtils/psMemory.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/sysUtils/psMemory.c
r1081 r1204 8 8 * @author Robert Lupton, Princeton University 9 9 * 10 * @version $Revision: 1.2 6$ $Name: not supported by cvs2svn $11 * @date $Date: 2004-0 6-24 03:12:19$10 * @version $Revision: 1.27 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2004-07-09 02:45:42 $ 12 12 * 13 13 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 190 190 if (m == NULL) { 191 191 psError(funcName,"Memory Corruption: NULL memory block found."); 192 return(1); 192 return 1; 193 } 194 195 if (m->refCounter == 0) { 196 // using an unreferenced block of memory, are you? 197 psError(__func__,"Memory Corruption: memory block %ld was freed but still used.", 198 m->id); 199 return 1; 193 200 } 194 201 195 202 if (m->startblock != P_PS_MEMMAGIC || m->endblock != P_PS_MEMMAGIC) { 196 psError(funcName, " psMemCheckCorruption: memory block %ld is corrupted (buffer underflow)",203 psError(funcName, "Memory Corruption: memory block %ld is corrupted (buffer underflow)", 197 204 m->id); 198 return (1);205 return 1; 199 206 } 200 207 if (*(void**)((int8_t*)(m+1)+m->userMemorySize) != P_PS_MEMMAGIC) { 201 psError(funcName, " psMemCheckCorruption: memory block %ld is corrupted (buffer overflow)",208 psError(funcName, "Memory Corruption: memory block %ld is corrupted (buffer overflow)", 202 209 m->id); 203 return (1);204 } 205 206 return (0);210 return 1; 211 } 212 213 return 0; 207 214 } 208 215 … … 292 299 bool isBlockLast = false; 293 300 301 if (checkMemBlock(ptr, __func__) != 0) { 302 memProblemCallback(ptr, file, lineno); 303 psAbort(file,"Realloc detected a memory corruption (id %ld @ %s:%d).", 304 ptr->id,ptr->file,ptr->lineno); 305 } 306 294 307 pthread_mutex_lock(&memBlockListMutex); 295 308 … … 331 344 void p_psFree(void *vptr, const char *file, int lineno) 332 345 { 333 if (vptr == NULL) { 334 return; 335 } 336 337 psMemBlock *ptr = ((psMemBlock *)vptr) - 1; 338 339 if (checkMemBlock(ptr, __func__) != 0) { 340 memProblemCallback(ptr, file, lineno); // we may not own this block; don't free it 341 return; 342 } 343 344 (void)psMemDecrRefCounter(vptr); // this handles the free, if required. 345 } 346 347 /* 348 * Check for memory leaks. Not production quality code 346 (void)p_psMemDecrRefCounter(vptr,file,lineno); // this handles the free, if required. 347 } 348 349 /* 350 * Check for memory leaks. 349 351 */ 350 352 int psMemCheckLeaks(psMemoryId id0,psMemBlock ***arr,FILE *fd) … … 419 421 } 420 422 // increment and return refCounter 421 void *psMemIncrRefCounter(void *vptr)423 void* p_psMemIncrRefCounter(void *vptr, const char *file, int lineno) 422 424 { 423 425 psMemBlock *ptr; … … 430 432 431 433 if (checkMemBlock(ptr, __func__)) { 432 memProblemCallback(ptr, __func__, __LINE__);434 memProblemCallback(ptr, file,lineno); 433 435 } 434 436 … … 441 443 442 444 // decrement and return refCounter 443 void *psMemDecrRefCounter(void *vptr)445 void* p_psMemDecrRefCounter(void *vptr,const char *file, int lineno) 444 446 { 445 447 if (vptr == NULL) { … … 449 451 psMemBlock *ptr = ((psMemBlock *)vptr) - 1; 450 452 453 if (checkMemBlock(ptr, __func__) != 0) { 454 memProblemCallback(ptr, file, lineno); 455 return NULL; 456 } 451 457 452 458 pthread_mutex_lock(&ptr->refCounterMutex); … … 469 475 } 470 476 477 #ifdef PS_MEM_DEBUG 478 // for debug mode, we should keep the memBlock around and mark as not referenced. 479 ptr->refCounter = 0; 480 (void)p_psRealloc(vptr,0,file,lineno); 481 #else 482 471 483 pthread_mutex_lock(&memBlockListMutex); 472 484 … … 487 499 488 500 free(ptr); 501 #endif 489 502 490 503 vptr = NULL; // since we freed it, make sure we return NULL. … … 502 515 psMemBlock *ptr = ((psMemBlock *)vptr) - 1; 503 516 517 if (checkMemBlock(ptr, __func__) != 0) { 518 memProblemCallback(ptr, __func__, __LINE__); 519 } 520 504 521 ptr->freeFcn = freeFcn; 505 522 … … 513 530 psMemBlock *ptr = ((psMemBlock *)vptr) - 1; 514 531 532 if (checkMemBlock(ptr, __func__) != 0) { 533 memProblemCallback(ptr, __func__, __LINE__); 534 } 535 515 536 return ptr->freeFcn; 516 537 }
Note:
See TracChangeset
for help on using the changeset viewer.
