Doxygen Source Code Documentation
mcw_malloc.c File Reference
#include "mcw_malloc.h"#include "Amalloc.h"#include "debugtrace.h"Go to the source code of this file.
| Data Structures | |
| struct | mallitem | 
| Defines | |
| #define | MAGIC ((char) 0xd7) | 
| #define | NEXTRA (2*sizeof(int)) | 
| #define | UINT unsigned int | 
| #define | NTB 5 | 
| #define | SLOTS 8191 | 
| #define | INLINE | 
| #define | ADD_TRACEBACK(ip) | 
| #define | shift_tracker(fff) ptr_tracker( ((char *)(fff)) - NEXTRA ) | 
| #define | JBASE 32768 | 
| Functions | |
| INLINE UINT | mallkey (char *fred) | 
| mallitem * | ptr_tracker (void *fred) | 
| mallitem * | find_empty_slot (int jj) | 
| void | add_tracker (void *fred, size_t n, char *fn, int ln) | 
| void * | malloc_track (size_t n, char *fn, int ln) | 
| void | probe_track (mallitem *ip) | 
| void * | realloc_track (mallitem *ip, size_t n, char *fn, int ln) | 
| void * | calloc_track (size_t n, size_t m, char *fn, int ln) | 
| void | free_track (mallitem *ip) | 
| char * | mcw_malloc_status (const char *fn, int ln) | 
| int | THD_is_file (char *) | 
| void | qsort_intint (int, int *, int *) | 
| void | mcw_malloc_dump (void) | 
| void | enable_mcw_malloc () | 
| void | pause_mcw_malloc () | 
| void | resume_mcw_malloc () | 
| int | mcw_malloc_paused () | 
| int | mcw_malloc_enabled () | 
| void * | mcw_malloc (size_t n, char *fnam, int lnum) | 
| void * | mcw_realloc (void *fred, size_t n, char *fnam, int lnum) | 
| void * | mcw_calloc (size_t n, size_t m, char *fnam, int lnum) | 
| void | mcw_free (void *fred) | 
| char * | mcw_XtMalloc (Cardinal n, char *fnam, int lnum) | 
| char * | mcw_XtRealloc (char *p, Cardinal n, char *fnam, int lnum) | 
| void | mcw_XtFree (char *p) | 
| char * | mcw_XtCalloc (Cardinal n, Cardinal m, char *fnam, int lnum) | 
| Variables | |
| mallitem ** | htab = NULL | 
| int * | nhtab = NULL | 
| UINT | serial = 0 | 
| const char * | pr_nam = NULL | 
| int | pr_lin = 0 | 
| int | use_tracking = 0 | 
| int | pz = 0 | 
Define Documentation
| 
 | 
| Value: do{ int tt ; \ for( tt=1 ; tt <= NTB ; tt++ ) \ ip->ptb[tt-1] = (tt < DBG_num) ? DBG_rout[DBG_num-tt] : NULL; } while(0) Definition at line 76 of file mcw_malloc.c. Referenced by add_tracker(), and realloc_track(). | 
| 
 | 
| 
 Definition at line 72 of file mcw_malloc.c. Referenced by mallkey(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 17 of file mcw_malloc.c. Referenced by malloc_track(), probe_track(), and realloc_track(). | 
| 
 | 
| 
 Definition at line 18 of file mcw_malloc.c. Referenced by malloc_track(), probe_track(), and realloc_track(). | 
| 
 | 
| 
 Definition at line 39 of file mcw_malloc.c. Referenced by mcw_malloc_dump(), and probe_track(). | 
| 
 | 
| 
 Definition at line 122 of file mcw_malloc.c. Referenced by hidden_NI_free(), hidden_NI_realloc(), mcw_free(), mcw_realloc(), mcw_XtFree(), and mcw_XtRealloc(). | 
| 
 | 
| define SLOTS 503 * Definition at line 59 of file mcw_malloc.c. Referenced by add_tracker(), enable_mcw_malloc(), mcw_malloc_dump(), mcw_malloc_status(), ptr_tracker(), and realloc_track(). | 
| 
 | 
| 
 Definition at line 34 of file mcw_malloc.c. Referenced by mallkey(), and mcw_malloc_status(). | 
Function Documentation
| 
 | ||||||||||||||||||||
| Add an entry to the hash table, given the address, the user's size, and the filename and line number. ------------------------------------------------------------------ Definition at line 157 of file mcw_malloc.c. References ADD_TRACEBACK, find_empty_slot(), mallkey(), mallitem::pfn, mallitem::pln, mallitem::pmt, mallitem::pss, mallitem::psz, serial, and SLOTS. 
 00158 {
00159    int jj ;
00160    mallitem * ip ;
00161 
00162    if( fred == NULL ) return ;   /* bad news */
00163 
00164    jj = mallkey((char *)fred) % SLOTS ;  /* which hash list to use */
00165    ip = find_empty_slot(jj) ;    /* get an empty slot in this list */
00166 
00167    /* now put the data into the hash table */
00168 
00169    ip->pmt = fred ;
00170    ip->psz = n ;
00171    ip->pfn = fn ;
00172    ip->pln = ln ;
00173    ip->pss = ++serial ;
00174 
00175    ADD_TRACEBACK(ip) ;  /* 16 Feb 2001 */
00176 
00177    return ;
00178 }
 | 
| 
 | ||||||||||||||||||||
| Tracking replacement for calloc(). ------------------------------------------------------------------- Definition at line 318 of file mcw_malloc.c. References malloc_track(). 
 00319 {
00320    void * fred ;
00321    size_t nn = n*m ;
00322 
00323    fred = malloc_track(nn,fn,ln) ; if( fred == NULL ) return NULL ;
00324    memset( fred , 0 , nn ) ;
00325    return fred ;
00326 }
 | 
| 
 | 
| 
 Definition at line 494 of file mcw_malloc.c. References getenv(), malloc, nhtab, SLOTS, and use_tracking. Referenced by machdep(), and main(). 
 00495 {
00496    char * str = getenv("AFNI_NO_MCW_MALLOC") ;  /* NOT my_getenv */
00497 
00498    if( use_tracking ) return ;   /* 05 Nov 2001 */
00499 
00500    use_tracking = 1 ;
00501    if( str!=NULL && ( str[0]=='y' || str[0]=='Y') ) use_tracking = 0 ;
00502 
00503    if( use_tracking && htab == NULL ){  /* initialize hash table */
00504       int jj ;
00505       htab  = (mallitem **) malloc( SLOTS * sizeof(mallitem *) ) ;
00506       nhtab = (int *)       malloc( SLOTS * sizeof(int) ) ;
00507       for( jj=0 ; jj < SLOTS ; jj++ ){
00508          htab[jj] = NULL ; nhtab[jj] = 0 ;
00509       }
00510    }
00511 
00512    return ;
00513 }
 | 
| 
 | 
| Find an empty entry in the hash table list [jj] and return a pointer to it. Will create the entry, if need be. ------------------------------------------------------------------- Definition at line 129 of file mcw_malloc.c. References malloc, nhtab, mallitem::pmt, and realloc. 
 00130 {
00131    int kk ;
00132 
00133    if( htab[jj] == NULL ){                               /* must make new list  */
00134       htab[jj] = (mallitem *) malloc(sizeof(mallitem)) ; /* of length 1 at [jj] */
00135      nhtab[jj] = 1 ;
00136       kk       = 0 ;
00137       htab[jj][0].pmt = NULL ;  /* mark as empty */
00138    } else {
00139       for( kk=nhtab[jj]-1 ; kk >= 0 ; kk-- )    /* scan (backwards) for NULL entry */
00140          if( htab[jj][kk].pmt == NULL ) break ; /* found it? */
00141 
00142       if( kk < 0 ){                             /* must make list longer */
00143          kk = nhtab[jj] ; nhtab[jj]++ ;
00144          htab[jj] = (mallitem *) realloc( htab[jj], sizeof(mallitem)*nhtab[jj] ) ;
00145          htab[jj][kk].pmt = NULL ;  /* mark as empty */
00146       }
00147    }
00148 
00149    return (htab[jj]+kk) ;
00150 }
 | 
| 
 | 
| 
 Definition at line 332 of file mcw_malloc.c. References free, mallitem::pmt, pr_nam, and probe_track(). 
 00333 {
00334    char * cfred ;
00335 
00336    if( ip == NULL ) return ;
00337    cfred = (char *) ip->pmt ;
00338    if( cfred == NULL ) return ;
00339 
00340    pr_nam = NULL ;
00341    probe_track(ip) ;  /* check for integrity before freeing */
00342 
00343    free(cfred) ; ip->pmt = NULL ; return ;
00344 }
 | 
| 
 | 
| Compute a unique non-negative integer key from an address ----------------------------------------------------------------- Definition at line 88 of file mcw_malloc.c. References INLINE, q, and UINT. 
 | 
| 
 | ||||||||||||||||
| The tracking replacement for malloc(). ------------------------------------------------------------------- Definition at line 184 of file mcw_malloc.c. References add_tracker(), MAGIC, malloc, and NEXTRA. 
 00185 {
00186    char * fred ;
00187    size_t nn = n + 2*NEXTRA ;
00188    int ii ;
00189 
00190    fred = (char *) malloc(nn) ;
00191    if( fred == NULL ){                                     /* real bad news */
00192       fprintf(stderr,
00193               "\n*** MCW_malloc(%d) from %s#%d FAILS!\a\n",  /* 02 Jan 2002 */
00194               (int)n , fn , ln ) ;
00195       return NULL ;
00196    }
00197 
00198    /* mark overrun buffers */
00199 
00200    for( ii=0 ; ii < NEXTRA ; ii++ )
00201       fred[ii] = fred[n+NEXTRA+ii] = MAGIC ;
00202 
00203    add_tracker(fred,n,fn,ln) ;      /* put in hash table */
00204    return (void *)(fred+NEXTRA) ;
00205 }
 | 
| 
 | ||||||||||||||||||||
| 
 Definition at line 580 of file mcw_malloc.c. References calloc, and calloc_track(). 
 00581 {
00582    if( use_tracking ) return calloc_track( n , m , fnam,lnum ) ;
00583    else               return calloc( n , m ) ;
00584 }
 | 
| 
 | 
| 
 Definition at line 590 of file mcw_malloc.c. References free, free_track(), shift_tracker, and use_tracking. 
 00591 {
00592    mallitem * ip ;
00593 
00594    if( fred == NULL ) return ;
00595 
00596    if( use_tracking && (ip=shift_tracker(fred)) != NULL ) free_track( ip ) ;
00597    else                                                   free( fred ) ;
00598 }
 | 
| 
 | ||||||||||||||||
| 
 Definition at line 553 of file mcw_malloc.c. References malloc, and malloc_track(). Referenced by mcw_realloc(). 
 00554 {
00555    if( use_tracking ) return malloc_track(n,fnam,lnum) ;
00556    else               return malloc(n) ;
00557 }
 | 
| 
 | 
| 
 Definition at line 380 of file mcw_malloc.c. References free, malloc, mcw_malloc_status(), nhtab, NTB, mallitem::pmt, mallitem::pss, mallitem::ptb, qsort_intint(), SLOTS, THD_is_file(), tt, and use_tracking. Referenced by AFNI_misc_CB(), and SUMA_input(). 
 00381 {
00382    int ii,jj,kk ;
00383    char fname[32] , * str ;
00384    FILE * fp = NULL ;
00385    int nptr=0 ;
00386    int * ss , * jk ;
00387 
00388    if( ! use_tracking ) return ;
00389 
00390    /* find and open an output file */
00391 
00392    for( ii=1 ; ii < 1000 ; ii++ ){
00393       sprintf(fname,"malldump.%03d",ii) ;
00394       if( THD_is_file(fname) ) continue ;
00395       fp = fopen( fname , "w" ) ;
00396       if( fp == NULL ){
00397          fprintf(stderr,"** Unable to open file %s for malloc table dump!\n",
00398                  fname ) ;
00399          return ;
00400       }
00401       break ;
00402    }
00403 
00404    if( fp == NULL ){
00405       fprintf(stderr,"** Attempt to exceed 999 malloc table dump files!\n") ;
00406       return ;
00407    }
00408 
00409    /* count number of entries in the hash table */
00410 
00411    for( jj=0 ; jj < SLOTS ; jj++ ){
00412       for( kk=0 ; kk < nhtab[jj] ; kk++ ){
00413          if( htab[jj][kk].pmt != NULL ) nptr++ ;
00414       }
00415    }
00416 
00417    if( nptr < 1 ){
00418       fprintf(fp    ,"--- Nothing is malloc()-ed !? ---\n") ;
00419       fprintf(stderr,"--- Nothing is malloc()-ed !? ---\n") ;
00420       fclose(fp) ;
00421    }
00422 
00423    /* setup to sort by serial number */
00424 
00425    ss = (int *) malloc(sizeof(int)*nptr) ;  /* serial number */
00426    jk = (int *) malloc(sizeof(int)*nptr) ;  /* holds combination of jj and kk */
00427 
00428 #define JBASE 32768  /* JBASE * SLOTS must be less than max int */
00429 
00430    /* scan table for non-NULL entries */
00431 
00432    for( ii=jj=0 ; jj < SLOTS ; jj++ ){
00433       for( kk=0 ; kk < nhtab[jj] ; kk++ ){
00434          if( htab[jj][kk].pmt != NULL ){
00435             ss[ii] = htab[jj][kk].pss ;   /* save serial number */
00436             jk[ii] = JBASE*jj + kk ;      /* save jj and kk */
00437             ii++ ;
00438          }
00439       }
00440    }
00441 
00442    qsort_intint( nptr , ss , jk ) ;  /* sort by ss, carrying jk along */
00443 
00444    /* now print table in serial number order */
00445 
00446 #ifdef USE_TRACING
00447    fprintf(fp, "MCW Malloc Table Dump:\n"
00448                "serial# size       source file          line# address    hash(j,k) <- Called by\n"
00449                "------- ---------- -------------------- ----- ---------- ----- ---    ---------\n");
00450 #else
00451    fprintf(fp, "MCW Malloc Table Dump:\n"
00452                "serial# size       source file          line# address    hash(j,k)\n"
00453                "------- ---------- -------------------- ----- ---------- ----- ---\n") ;
00454 #endif
00455 
00456    for( ii=0 ; ii < nptr ; ii++ ){
00457       jj = jk[ii] / JBASE ;           /* retrieve jj and kk */
00458       kk = jk[ii] % JBASE ;
00459       if( htab[jj][kk].pmt != NULL ){
00460          fprintf(fp,"%7u %10d %-20.30s %5d %10p %5d %3d",
00461                  htab[jj][kk].pss , (int)htab[jj][kk].psz ,
00462                  htab[jj][kk].pfn , htab[jj][kk].pln , htab[jj][kk].pmt ,
00463                  jj,kk ) ;
00464 #ifdef USE_TRACING
00465          { int tt ;
00466            for( tt=0 ; tt < NTB && htab[jj][kk].ptb[tt] != NULL ; tt++ )
00467               fprintf(fp," <- %s",htab[jj][kk].ptb[tt]) ;
00468          }
00469 #endif
00470          fprintf(fp,"\n") ;
00471       }
00472       else
00473          fprintf(fp,"*** Error at ii=%d jj=%d kk=%d\n",ii,jj,kk) ;
00474    }
00475 
00476    free(ss) ; free(jk) ;
00477 
00478    /* and print out the summary line (to the file and screen) */
00479 
00480    str = mcw_malloc_status(NULL,0) ;
00481    fprintf(fp,"----- Summary: %s\n",str) ;
00482    fclose(fp) ;
00483 
00484    fprintf(stderr,"** Malloc table dumped to file %s\n",fname) ;
00485    fprintf(stderr,"** Summary: %s\n",str) ;
00486 
00487    return ;
00488 }
 | 
| 
 | 
| 
 Definition at line 547 of file mcw_malloc.c. References use_tracking. 
 00547 { return (use_tracking != 0) ; }
 | 
| 
 | 
| 
 Definition at line 539 of file mcw_malloc.c. 
 00540 {
00541    return(pz);
00542 }
 | 
| 
 | ||||||||||||
| 
 Definition at line 352 of file mcw_malloc.c. References nhtab, mallitem::pmt, pr_lin, pr_nam, probe_track(), mallitem::psz, SLOTS, UINT, and use_tracking. Referenced by mcw_malloc_dump(). 
 00353 {
00354    static char buf[128] = "\0" ;
00355    int jj,kk , nptr=0 ; size_t nbyt=0 ;
00356 
00357    if( ! use_tracking ) return NULL ;
00358 
00359    for( jj=0 ; jj < SLOTS ; jj++ ){
00360       for( kk=0 ; kk < nhtab[jj] ; kk++ ){
00361          if( htab[jj][kk].pmt != NULL ){
00362             pr_nam = (const char *)fn ; pr_lin = ln ;
00363             probe_track( htab[jj]+kk ) ; /* check for integrity */
00364             nptr++ ; nbyt += htab[jj][kk].psz ;
00365          }
00366       }
00367    }
00368 
00369    sprintf(buf,"chunks=%d bytes=%u",nptr,(UINT)nbyt) ;
00370    return buf ;
00371 }
 | 
| 
 | ||||||||||||||||||||
| 
 Definition at line 563 of file mcw_malloc.c. References mcw_malloc(), realloc, realloc_track(), shift_tracker, and use_tracking. 
 00564 {
00565    mallitem * ip ;
00566 
00567    if( fred == NULL )
00568       return mcw_malloc( n , fnam , lnum ) ;
00569 
00570    if( use_tracking && (ip=shift_tracker(fred)) != NULL )
00571       return realloc_track( ip , n , fnam,lnum ) ;
00572    else
00573       return realloc( fred , n ) ;
00574 }
 | 
| 
 | ||||||||||||||||||||
| 
 Definition at line 645 of file mcw_malloc.c. References calloc_track(), and XtCalloc. 
 00646 {
00647    if( use_tracking ) return (char *) calloc_track( n , m , fnam,lnum ) ;
00648    else               return XtCalloc( n , m ) ;
00649 }
 | 
| 
 | 
| 
 Definition at line 631 of file mcw_malloc.c. References free_track(), p, shift_tracker, use_tracking, and XtFree. 
 00632 {
00633    mallitem * ip ;
00634 
00635    if( p == NULL ) return ;
00636 
00637    if( use_tracking && (ip=shift_tracker(p)) != NULL ) free_track(ip) ;
00638    else                                                XtFree(p) ;
00639 }
 | 
| 
 | ||||||||||||||||
| 
 Definition at line 604 of file mcw_malloc.c. References malloc_track(), and XtMalloc. Referenced by mcw_XtRealloc(). 
 00605 {
00606    if( use_tracking ) return (char *) malloc_track(n,fnam,lnum) ;
00607    else               return (char *)XtMalloc(n) ;
00608 }
 | 
| 
 | ||||||||||||||||||||
| 
 Definition at line 614 of file mcw_malloc.c. References mcw_XtMalloc(), p, realloc_track(), shift_tracker, use_tracking, and XtRealloc. 
 00615 {
00616    mallitem * ip ;
00617 
00618    if( p == NULL )
00619       return mcw_XtMalloc( n , fnam , lnum ) ;
00620 
00621    if( use_tracking && (ip=shift_tracker(p)) != NULL )
00622       return (char*)realloc_track( ip , n , fnam,lnum ) ;
00623    else
00624       return (char*)XtRealloc( p , n ) ;
00625 }
 | 
| 
 | 
| 
 Definition at line 523 of file mcw_malloc.c. References pz, and use_tracking. Referenced by SUMA_allocate2D(), and SUMA_free2D(). 
 00524 {
00525    if (pz) return;   /* nothing to do */
00526    if (use_tracking) {
00527       pz = 1;
00528       use_tracking = 0;
00529    }
00530    return;
00531 }    
 | 
| 
 | 
| 
 Definition at line 214 of file mcw_malloc.c. References MAGIC, NEXTRA, NTB, mallitem::pfn, mallitem::pln, mallitem::pmt, pr_lin, pr_nam, mallitem::pss, mallitem::psz, mallitem::ptb, and tt. 
 00215 {
00216    int ii ;
00217    size_t n ;
00218    char * fred ;
00219 
00220    if( ip == NULL ){ pr_nam=NULL; return; } /* error */
00221    fred = (char *) ip->pmt ; if( fred == NULL ){ pr_nam=NULL; return; }
00222    n = ip->psz ;
00223 
00224    for( ii=0 ; ii < NEXTRA ; ii++ )
00225       if( fred[ii] != MAGIC ){
00226          fprintf(stderr,"*** MCW_malloc pre-corruption!  "
00227                         "serial=%u size=%d source=%s line#%d",
00228                         ip->pss,(int)ip->psz,ip->pfn,ip->pln ) ;
00229 #ifdef USE_TRACING
00230          { int tt ;
00231            for( tt=0 ; tt < NTB && ip->ptb[tt] != NULL ; tt++ )
00232              fprintf(stderr," <- %s",ip->ptb[tt]) ;
00233          }
00234 #endif
00235          fprintf(stderr,"\n") ;
00236 
00237          if( pr_nam != NULL )
00238           fprintf(stderr," [[ Called from source=%.50s line#%d ]]\n",pr_nam,pr_lin);
00239          break ;
00240       }
00241 
00242    for( ii=0 ; ii < NEXTRA ; ii++ )
00243       if( fred[n+NEXTRA+ii] != MAGIC ){
00244          fprintf(stderr,"*** MCW_malloc post-corruption!  "
00245                         "serial=%u size=%d source=%s line#%d\n",
00246                         ip->pss,(int)ip->psz,ip->pfn,ip->pln ) ;
00247 #ifdef USE_TRACING
00248          { int tt ;
00249            for( tt=0 ; tt < NTB && ip->ptb[tt] != NULL ; tt++ )
00250              fprintf(stderr," <- %s",ip->ptb[tt]) ;
00251          }
00252 #endif
00253          fprintf(stderr,"\n") ;
00254 
00255          if( pr_nam != NULL )
00256           fprintf(stderr," [[ Called from source=%.50s line#%d ]]\n",pr_nam,pr_lin);
00257          break ;
00258       }
00259 
00260    pr_nam = NULL ;  /* reset */
00261    return ;
00262 }
 | 
| 
 | 
| Find an address in the hash table; returns a pointer to the NI_mallitem that owns it (or NULL) ------------------------------------------------------------------ Definition at line 103 of file mcw_malloc.c. References mallkey(), nhtab, mallitem::pmt, and SLOTS. 
 00104 {
00105    int jj,kk ;
00106 
00107    if( fred == NULL ) return NULL ;
00108 
00109    jj = mallkey((char *)fred) % SLOTS ;      /* hash table location */
00110 
00111    if( htab[jj] == NULL ) return NULL ;  /* nothing there */
00112 
00113    for( kk=0 ; kk < nhtab[jj] ; kk++ )   /* scan for match */
00114       if( htab[jj][kk].pmt == fred ) return (htab[jj]+kk) ;
00115 
00116    return NULL ; /* no match found */
00117 }
 | 
| 
 | ||||||||||||||||
| 
 Definition at line 763 of file niml_malloc.c. 
 00764 {
00765    qsrec_intint( n , a , ia , QS_CUTOFF ) ;
00766    isort_intint( n , a , ia ) ;
00767    return ;
00768 }
 | 
| 
 | ||||||||||||||||||||
| 
 Definition at line 268 of file mcw_malloc.c. References ADD_TRACEBACK, add_tracker(), MAGIC, mallkey(), NEXTRA, mallitem::pfn, mallitem::pln, mallitem::pmt, pr_lin, pr_nam, probe_track(), mallitem::pss, mallitem::psz, realloc, serial, and SLOTS. 
 00269 {
00270    char * nfred , * cfred ;
00271    size_t nn = n + 2*NEXTRA ;
00272    int ii , cjj,njj , kk ;
00273 
00274    if( ip == NULL ) return NULL ;  /* should not happen */
00275 
00276    pr_nam = (const char *)fn ; pr_lin = ln ;
00277    probe_track(ip) ;  /* check for integrity before reallocation */
00278    cfred = ip->pmt ;  /* old address */
00279 
00280    nfred = (char*)realloc( cfred , nn ) ;
00281    if( nfred == NULL ){                                       /* real bad */
00282       fprintf(stderr,
00283               "\n*** MCW_realloc(%d) from %s#%d FAILS!\a\n",  /* 02 Jan 2002 */
00284               (int)n , fn , ln ) ;
00285       return NULL ;
00286    }
00287 
00288    for( ii=0 ; ii < NEXTRA ; ii++ )
00289       nfred[ii] = nfred[n+NEXTRA+ii] = MAGIC ;
00290 
00291    cjj = mallkey(cfred) % SLOTS ;  /* hash table list for old */
00292    njj = mallkey(nfred) % SLOTS ;  /* and for new address */
00293 
00294    if( cjj == njj ){  /* can just update old hashtable entry */
00295 
00296       ip->pmt = nfred ;
00297       ip->psz = n ;
00298       ip->pfn = fn ;
00299       ip->pln = ln ;
00300       ip->pss = ++serial ;
00301 
00302       ADD_TRACEBACK(ip) ;  /* 16 Feb 2001 */
00303 
00304    } else {           /* must move into a different list */
00305 
00306       add_tracker( nfred , n , fn , ln ) ;
00307 
00308       ip->pmt = NULL ; /* mark old entry as free */
00309    }
00310 
00311    return (void *)(nfred+NEXTRA) ;
00312 }
 | 
| 
 | 
| 
 Definition at line 532 of file mcw_malloc.c. References pz, and use_tracking. Referenced by SUMA_allocate2D(), and SUMA_free2D(). 
 00533 {
00534    if (!pz) return; 
00535    pz = 0;
00536    use_tracking = 1;
00537    return;
00538 }
 | 
| 
 | 
Variable Documentation
| 
 | 
| define SLOTS 32003 * Definition at line 64 of file mcw_malloc.c. | 
| 
 | 
| 
 Definition at line 65 of file mcw_malloc.c. Referenced by enable_mcw_malloc(), find_empty_slot(), mcw_malloc_dump(), mcw_malloc_status(), and ptr_tracker(). | 
| 
 | 
| 
 Definition at line 212 of file mcw_malloc.c. Referenced by mcw_malloc_status(), probe_track(), and realloc_track(). | 
| 
 | 
| 
 Definition at line 211 of file mcw_malloc.c. Referenced by free_track(), mcw_malloc_status(), probe_track(), and realloc_track(). | 
| 
 | 
| 
 Definition at line 522 of file mcw_malloc.c. Referenced by pause_mcw_malloc(), and resume_mcw_malloc(). | 
| 
 | 
| 
 Definition at line 66 of file mcw_malloc.c. Referenced by add_tracker(), and realloc_track(). | 
| 
 | 
| 
 Definition at line 350 of file mcw_malloc.c. Referenced by enable_mcw_malloc(), mcw_free(), mcw_malloc_dump(), mcw_malloc_enabled(), mcw_malloc_status(), mcw_realloc(), mcw_XtFree(), mcw_XtRealloc(), pause_mcw_malloc(), and resume_mcw_malloc(). | 
 
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
 
 
 
 
       
	   
	   
	   
	  