Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
thd_purgedblk.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "mrilib.h"
00008 #include "thd.h"
00009
00010 Boolean THD_purge_datablock( THD_datablock * blk , int mem_type )
00011 {
00012 int ibr , nfreed ;
00013 void * ptr ;
00014
00015
00016
00017 if( ! ISVALID_DATABLOCK(blk) || blk->brick == NULL ) return False ;
00018 if( (blk->malloc_type & mem_type) == 0 ) return False ;
00019 if( DBLK_LOCKED(blk) ) return False ;
00020
00021
00022
00023 nfreed = 0 ;
00024 switch( blk->malloc_type ){
00025
00026 case DATABLOCK_MEM_MALLOC:
00027 for( ibr=0 ; ibr < blk->nvals ; ibr++ ){
00028 ptr = DBLK_ARRAY(blk,ibr) ;
00029 if( ptr != NULL ){ free(ptr) ; nfreed++ ; }
00030 mri_clear_data_pointer( DBLK_BRICK(blk,ibr) ) ;
00031 }
00032 return True ;
00033
00034 case DATABLOCK_MEM_MMAP:
00035 ptr = DBLK_ARRAY(blk,0) ;
00036 if( ptr != NULL ){ munmap( ptr , (size_t)blk->total_bytes ) ; nfreed++ ; }
00037 for( ibr=0 ; ibr < blk->nvals ; ibr++ )
00038 mri_clear_data_pointer( DBLK_BRICK(blk,ibr) ) ;
00039 return True ;
00040
00041 case DATABLOCK_MEM_SHARED:
00042 return False ;
00043 }
00044
00045 return False ;
00046 }
00047
00048
00049
00050
00051
00052 Boolean THD_purge_one_brick( THD_datablock * blk , int iv )
00053 {
00054 void * ptr ;
00055
00056
00057
00058 if( ! ISVALID_DATABLOCK(blk) || blk->brick == NULL ) return False ;
00059 if( DBLK_LOCKED(blk) ) return False ;
00060 if( iv < 0 || iv >= blk->nvals ) return False ;
00061 if( blk->malloc_type != DATABLOCK_MEM_MALLOC ) return False ;
00062
00063 ptr = DBLK_ARRAY(blk,iv) ;
00064 if( ptr != NULL ) free(ptr) ;
00065 mri_clear_data_pointer( DBLK_BRICK(blk,iv) ) ;
00066 return True ;
00067 }