Doxygen Source Code Documentation
thd_purgedblk.c File Reference
#include "mrilib.h"
#include "thd.h"
Go to the source code of this file.
Functions | |
Boolean | THD_purge_datablock (THD_datablock *blk, int mem_type) |
Boolean | THD_purge_one_brick (THD_datablock *blk, int iv) |
Function Documentation
|
Definition at line 10 of file thd_purgedblk.c. References THD_datablock::brick, DATABLOCK_MEM_MALLOC, DATABLOCK_MEM_MMAP, DATABLOCK_MEM_SHARED, DBLK_ARRAY, DBLK_BRICK, DBLK_LOCKED, free, ISVALID_DATABLOCK, THD_datablock::malloc_type, mri_clear_data_pointer, THD_datablock::nvals, and THD_datablock::total_bytes. Referenced by THD_delete_datablock(), THD_force_malloc_type(), THD_load_datablock(), and THD_write_datablock().
00011 { 00012 int ibr , nfreed ; 00013 void * ptr ; 00014 00015 /*-- sanity checks --*/ 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 /*-- free the data space --*/ 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: /* can't be purged */ 00042 return False ; 00043 } 00044 00045 return False ; /* shouldn't be reached */ 00046 } |
|
Definition at line 52 of file thd_purgedblk.c. References THD_datablock::brick, DATABLOCK_MEM_MALLOC, DBLK_ARRAY, DBLK_BRICK, DBLK_LOCKED, free, ISVALID_DATABLOCK, THD_datablock::malloc_type, mri_clear_data_pointer, and THD_datablock::nvals.
00053 { 00054 void * ptr ; 00055 00056 /* sanity checks */ 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 } |