/*****************************************************************************
Major portions of this software are copyrighted by the Medical College
of Wisconsin, 1994-2000, and are released under the Gnu General Public
License, Version 2. See the file README.Copyright for details.
******************************************************************************/
#include "mrilib.h"
#include "thd.h"
Boolean THD_purge_datablock( THD_datablock * blk , int mem_type )
{
int ibr ;
void *ptr ;
/*-- sanity checks --*/
if( ! ISVALID_DATABLOCK(blk) || blk->brick == NULL ) return False ;
if( (blk->malloc_type & mem_type) == 0 ) return False ;
if( DBLK_LOCKED(blk) ) return False ;
/*-- free the data space --*/
switch( blk->malloc_type ){
case DATABLOCK_MEM_MALLOC:
for( ibr=0 ; ibr < blk->nvals ; ibr++ ){
#if 1
mri_clear( DBLK_BRICK(blk,ibr) ) ; /* 31 Jan 2007 */
#else
ptr = DBLK_ARRAY(blk,ibr) ;
if( ptr != NULL ){
free(ptr); mri_clear_data_pointer(DBLK_BRICK(blk,ibr));
}
#endif
}
return True ;
case DATABLOCK_MEM_MMAP:
ptr = DBLK_ARRAY(blk,0) ;
if( ptr != NULL ) munmap( ptr , (size_t)blk->total_bytes ) ;
for( ibr=0 ; ibr < blk->nvals ; ibr++ )
mri_clear_data_pointer( DBLK_BRICK(blk,ibr) ) ;
return True ;
case DATABLOCK_MEM_SHARED: /* can't be purged */
return False ;
}
return False ; /* shouldn't be reached */
}
/*----------------------------------------------------------
04 May 1998: purge just one sub-brick, if possible
------------------------------------------------------------*/
Boolean THD_purge_one_brick( THD_datablock * blk , int iv )
{
void * ptr ;
/* sanity checks */
if( ! ISVALID_DATABLOCK(blk) || blk->brick == NULL ) return False ;
if( DBLK_LOCKED(blk) ) return False ;
if( iv < 0 || iv >= blk->nvals ) return False ;
if( blk->malloc_type != DATABLOCK_MEM_MALLOC ) return False ;
#if 1
mri_clear( DBLK_BRICK(blk,iv) ) ; /* 31 Jan 2007 */
#else
ptr = DBLK_ARRAY(blk,iv) ;
if( ptr != NULL ) free(ptr) ;
mri_clear_data_pointer( DBLK_BRICK(blk,iv) ) ;
#endif
return True ;
}
syntax highlighted by Code2HTML, v. 0.9.1