diff options
Diffstat (limited to 'src/H5HFhdr.c')
-rw-r--r-- | src/H5HFhdr.c | 628 |
1 files changed, 315 insertions, 313 deletions
diff --git a/src/H5HFhdr.c b/src/H5HFhdr.c index 043ab87..8016f5b 100644 --- a/src/H5HFhdr.c +++ b/src/H5HFhdr.c @@ -26,18 +26,17 @@ /* Module Setup */ /****************/ -#include "H5HFmodule.h" /* This source code file is part of the H5HF module */ - +#include "H5HFmodule.h" /* This source code file is part of the H5HF module */ /***********/ /* Headers */ /***********/ -#include "H5private.h" /* Generic Functions */ -#include "H5Eprivate.h" /* Error handling */ -#include "H5HFpkg.h" /* Fractal heaps */ -#include "H5MFprivate.h" /* File memory management */ -#include "H5MMprivate.h" /* Memory management */ -#include "H5VMprivate.h" /* Vectors and arrays */ +#include "H5private.h" /* Generic Functions */ +#include "H5Eprivate.h" /* Error handling */ +#include "H5HFpkg.h" /* Fractal heaps */ +#include "H5MFprivate.h" /* File memory management */ +#include "H5MMprivate.h" /* Memory management */ +#include "H5VMprivate.h" /* Vectors and arrays */ /****************/ /* Local Macros */ @@ -58,22 +57,18 @@ #define H5HF_WIDTH_LIMIT (64 * 1024) #endif /* NDEBUG */ - /******************/ /* Local Typedefs */ /******************/ - /********************/ /* Package Typedefs */ /********************/ - /********************/ /* Local Prototypes */ /********************/ - /*********************/ /* Package Variables */ /*********************/ @@ -81,18 +76,14 @@ /* Declare a free list to manage the H5HF_hdr_t struct */ H5FL_DEFINE_STATIC(H5HF_hdr_t); - /*****************************/ /* Library Private Variables */ /*****************************/ - /*******************/ /* Local Variables */ /*******************/ - - /*------------------------------------------------------------------------- * Function: H5HF__hdr_alloc * @@ -108,8 +99,8 @@ H5FL_DEFINE_STATIC(H5HF_hdr_t); H5HF_hdr_t * H5HF__hdr_alloc(H5F_t *f) { - H5HF_hdr_t *hdr = NULL; /* Shared fractal heap header */ - H5HF_hdr_t *ret_value = NULL; /* Return value */ + H5HF_hdr_t *hdr = NULL; /* Shared fractal heap header */ + H5HF_hdr_t *ret_value = NULL; /* Return value */ FUNC_ENTER_PACKAGE @@ -119,11 +110,11 @@ H5HF__hdr_alloc(H5F_t *f) HDassert(f); /* Allocate space for the shared information */ - if(NULL == (hdr = H5FL_CALLOC(H5HF_hdr_t))) - HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "allocation failed for fractal heap shared header") + if (NULL == (hdr = H5FL_CALLOC(H5HF_hdr_t))) + HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, NULL, "allocation failed for fractal heap shared header") /* Set the internal parameters for the heap */ - hdr->f = f; + hdr->f = f; hdr->sizeof_size = H5F_SIZEOF_SIZE(f); hdr->sizeof_addr = H5F_SIZEOF_ADDR(f); @@ -134,7 +125,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_alloc() */ - /*------------------------------------------------------------------------- * Function: H5HF_hdr_free_space * @@ -151,12 +141,12 @@ done: static herr_t H5HF__hdr_compute_free_space(H5HF_hdr_t *hdr, unsigned iblock_row) { - hsize_t acc_heap_size; /* Accumumated heap space */ - hsize_t iblock_size; /* Size of indirect block to calculate for */ - hsize_t acc_dblock_free; /* Accumumated direct block free space */ - size_t max_dblock_free; /* Max. direct block free space */ - unsigned curr_row; /* Current row in block */ - herr_t ret_value = SUCCEED; /* Return value */ + hsize_t acc_heap_size; /* Accumumated heap space */ + hsize_t iblock_size; /* Size of indirect block to calculate for */ + hsize_t acc_dblock_free; /* Accumumated direct block free space */ + size_t max_dblock_free; /* Max. direct block free space */ + unsigned curr_row; /* Current row in block */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_STATIC_NOERR @@ -167,17 +157,15 @@ H5HF__hdr_compute_free_space(H5HF_hdr_t *hdr, unsigned iblock_row) HDassert(iblock_row >= hdr->man_dtable.max_direct_rows); /* Set the free space in direct blocks */ - acc_heap_size = 0; + acc_heap_size = 0; acc_dblock_free = 0; max_dblock_free = 0; - iblock_size = hdr->man_dtable.row_block_size[iblock_row]; - curr_row = 0; - while(acc_heap_size < iblock_size) { - acc_heap_size += hdr->man_dtable.row_block_size[curr_row] * - hdr->man_dtable.cparam.width; - acc_dblock_free += hdr->man_dtable.row_tot_dblock_free[curr_row] * - hdr->man_dtable.cparam.width; - if(hdr->man_dtable.row_max_dblock_free[curr_row] > max_dblock_free) + iblock_size = hdr->man_dtable.row_block_size[iblock_row]; + curr_row = 0; + while (acc_heap_size < iblock_size) { + acc_heap_size += hdr->man_dtable.row_block_size[curr_row] * hdr->man_dtable.cparam.width; + acc_dblock_free += hdr->man_dtable.row_tot_dblock_free[curr_row] * hdr->man_dtable.cparam.width; + if (hdr->man_dtable.row_max_dblock_free[curr_row] > max_dblock_free) max_dblock_free = hdr->man_dtable.row_max_dblock_free[curr_row]; curr_row++; } /* end while */ @@ -189,7 +177,6 @@ H5HF__hdr_compute_free_space(H5HF_hdr_t *hdr, unsigned iblock_row) FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_compute_free_space() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_finish_init_phase1 * @@ -205,7 +192,7 @@ H5HF__hdr_compute_free_space(H5HF_hdr_t *hdr, unsigned iblock_row) herr_t H5HF__hdr_finish_init_phase1(H5HF_hdr_t *hdr) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -216,18 +203,17 @@ H5HF__hdr_finish_init_phase1(H5HF_hdr_t *hdr) /* Compute/cache some values */ hdr->heap_off_size = (uint8_t)H5HF_SIZEOF_OFFSET_BITS(hdr->man_dtable.cparam.max_index); - if(H5HF__dtable_init(&hdr->man_dtable) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't initialize doubling table info") + if (H5HF__dtable_init(&hdr->man_dtable) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't initialize doubling table info") /* Set the size of heap IDs */ - hdr->heap_len_size = (uint8_t)MIN(hdr->man_dtable.max_dir_blk_off_size, - H5VM_limit_enc_size((uint64_t)hdr->max_man_size)); + hdr->heap_len_size = + (uint8_t)MIN(hdr->man_dtable.max_dir_blk_off_size, H5VM_limit_enc_size((uint64_t)hdr->max_man_size)); done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_finish_init_phase1() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_finish_init_phase2 * @@ -243,8 +229,8 @@ done: herr_t H5HF__hdr_finish_init_phase2(H5HF_hdr_t *hdr) { - unsigned u; /* Local index variable */ - herr_t ret_value = SUCCEED; /* Return value */ + unsigned u; /* Local index variable */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -254,34 +240,34 @@ H5HF__hdr_finish_init_phase2(H5HF_hdr_t *hdr) HDassert(hdr); /* Set the free space in direct blocks */ - for(u = 0; u < hdr->man_dtable.max_root_rows; u++) { - if(u < hdr->man_dtable.max_direct_rows) { - hdr->man_dtable.row_tot_dblock_free[u] = hdr->man_dtable.row_block_size[u] - - H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr); - H5_CHECKED_ASSIGN(hdr->man_dtable.row_max_dblock_free[u], size_t, hdr->man_dtable.row_tot_dblock_free[u], hsize_t); + for (u = 0; u < hdr->man_dtable.max_root_rows; u++) { + if (u < hdr->man_dtable.max_direct_rows) { + hdr->man_dtable.row_tot_dblock_free[u] = + hdr->man_dtable.row_block_size[u] - H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr); + H5_CHECKED_ASSIGN(hdr->man_dtable.row_max_dblock_free[u], size_t, + hdr->man_dtable.row_tot_dblock_free[u], hsize_t); } /* end if */ - else - if(H5HF__hdr_compute_free_space(hdr, u) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't initialize direct block free space for indirect block") + else if (H5HF__hdr_compute_free_space(hdr, u) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, + "can't initialize direct block free space for indirect block") } /* end for */ /* Initialize the block iterator for searching for free space */ - if(H5HF__man_iter_init(&hdr->next_block) < 0) + if (H5HF__man_iter_init(&hdr->next_block) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't initialize space search block iterator") /* Initialize the information for tracking 'huge' objects */ - if(H5HF__huge_init(hdr) < 0) + if (H5HF__huge_init(hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't initialize info for tracking huge objects") /* Initialize the information for tracking 'tiny' objects */ - if(H5HF__tiny_init(hdr) < 0) + if (H5HF__tiny_init(hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't initialize info for tracking tiny objects") done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_finish_init_phase2() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_finish_init * @@ -297,7 +283,7 @@ done: herr_t H5HF__hdr_finish_init(H5HF_hdr_t *hdr) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -307,18 +293,17 @@ H5HF__hdr_finish_init(H5HF_hdr_t *hdr) HDassert(hdr); /* First phase of header final initialization */ - if(H5HF__hdr_finish_init_phase1(hdr) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't finish phase #1 of header final initialization") + if (H5HF__hdr_finish_init_phase1(hdr) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't finish phase #1 of header final initialization") /* Second phase of header final initialization */ - if(H5HF__hdr_finish_init_phase2(hdr) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't finish phase #2 of header final initialization") + if (H5HF__hdr_finish_init_phase2(hdr) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't finish phase #2 of header final initialization") done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_finish_init() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_create * @@ -334,9 +319,9 @@ done: haddr_t H5HF__hdr_create(H5F_t *f, const H5HF_create_t *cparam) { - H5HF_hdr_t *hdr = NULL; /* The new fractal heap header information */ - size_t dblock_overhead; /* Direct block's overhead */ - haddr_t ret_value = HADDR_UNDEF; /* Return value */ + H5HF_hdr_t *hdr = NULL; /* The new fractal heap header information */ + size_t dblock_overhead; /* Direct block's overhead */ + haddr_t ret_value = HADDR_UNDEF; /* Return value */ FUNC_ENTER_PACKAGE @@ -348,39 +333,40 @@ H5HF__hdr_create(H5F_t *f, const H5HF_create_t *cparam) #ifndef NDEBUG /* Check for valid parameters */ - if(cparam->managed.width == 0) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "width must be greater than zero") - if(cparam->managed.width > H5HF_WIDTH_LIMIT) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "width too large") - if(!POWER_OF_TWO(cparam->managed.width)) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "width not power of two") - if(cparam->managed.start_block_size == 0) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "starting block size must be greater than zero") - if(!POWER_OF_TWO(cparam->managed.start_block_size)) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "starting block size not power of two") - if(cparam->managed.max_direct_size == 0) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. direct block size must be greater than zero") - if(cparam->managed.max_direct_size > H5HF_MAX_DIRECT_SIZE_LIMIT) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. direct block size too large") - if(!POWER_OF_TWO(cparam->managed.max_direct_size)) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. direct block size not power of two") - if(cparam->managed.max_direct_size < cparam->max_man_size) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. direct block size not large enough to hold all managed blocks") - if(cparam->managed.max_index == 0) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. heap size must be greater than zero") + if (cparam->managed.width == 0) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "width must be greater than zero") + if (cparam->managed.width > H5HF_WIDTH_LIMIT) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "width too large") + if (!POWER_OF_TWO(cparam->managed.width)) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "width not power of two") + if (cparam->managed.start_block_size == 0) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "starting block size must be greater than zero") + if (!POWER_OF_TWO(cparam->managed.start_block_size)) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "starting block size not power of two") + if (cparam->managed.max_direct_size == 0) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. direct block size must be greater than zero") + if (cparam->managed.max_direct_size > H5HF_MAX_DIRECT_SIZE_LIMIT) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. direct block size too large") + if (!POWER_OF_TWO(cparam->managed.max_direct_size)) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. direct block size not power of two") + if (cparam->managed.max_direct_size < cparam->max_man_size) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, + "max. direct block size not large enough to hold all managed blocks") + if (cparam->managed.max_index == 0) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. heap size must be greater than zero") #endif /* NDEBUG */ /* Allocate & basic initialization for the shared header */ - if(NULL == (hdr = H5HF__hdr_alloc(f))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "can't allocate space for shared heap info") + if (NULL == (hdr = H5HF__hdr_alloc(f))) + HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "can't allocate space for shared heap info") #ifndef NDEBUG - if(cparam->managed.max_index > (unsigned)(8 * hdr->sizeof_size)) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. heap size too large for file") + if (cparam->managed.max_index > (unsigned)(8 * hdr->sizeof_size)) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. heap size too large for file") #endif /* NDEBUG */ /* Set the creation parameters for the heap */ - hdr->max_man_size = cparam->max_man_size; + hdr->max_man_size = cparam->max_man_size; hdr->checksum_dblocks = cparam->checksum_dblocks; H5MM_memcpy(&(hdr->man_dtable.cparam), &(cparam->managed), sizeof(H5HF_dtable_cparam_t)); @@ -395,44 +381,45 @@ H5HF__hdr_create(H5F_t *f, const H5HF_create_t *cparam) /* First phase of header final initialization */ /* (doesn't need ID length set up) */ - if(H5HF__hdr_finish_init_phase1(hdr) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, "can't finish phase #1 of header final initialization") + if (H5HF__hdr_finish_init_phase1(hdr) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, + "can't finish phase #1 of header final initialization") /* Copy any I/O filter pipeline */ /* (This code is not in the "finish init phase" routines because those * routines are also called from the cache 'load' callback, and the filter * length is already set in that case (its stored in the header on disk)) */ - if(cparam->pline.nused > 0) { + if (cparam->pline.nused > 0) { /* Check if the filters in the DCPL can be applied to this dataset */ - if(H5Z_can_apply_direct(&(cparam->pline)) < 0) + if (H5Z_can_apply_direct(&(cparam->pline)) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, "I/O filters can't operate on this heap") /* Mark the filters as checked */ hdr->checked_filters = TRUE; /* Make the "set local" filter callbacks for this dataset */ - if(H5Z_set_local_direct(&(cparam->pline)) < 0) + if (H5Z_set_local_direct(&(cparam->pline)) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, "unable to set local filter parameters") /* Copy the I/O filter pipeline from the creation parameters to the header */ - if(NULL == H5O_msg_copy(H5O_PLINE_ID, &(cparam->pline), &(hdr->pline))) + if (NULL == H5O_msg_copy(H5O_PLINE_ID, &(cparam->pline), &(hdr->pline))) HGOTO_ERROR(H5E_HEAP, H5E_CANTCOPY, HADDR_UNDEF, "can't copy I/O filter pipeline") /* Set the version for the I/O pipeline message */ - if(H5O_pline_set_version(hdr->f, &(hdr->pline)) < 0) + if (H5O_pline_set_version(hdr->f, &(hdr->pline)) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTSET, HADDR_UNDEF, "can't set version of I/O filter pipeline") /* Compute the I/O filters' encoded size */ - if(0 == (hdr->filter_len = (unsigned)H5O_msg_raw_size(hdr->f, H5O_PLINE_ID, FALSE, &(hdr->pline)))) + if (0 == (hdr->filter_len = (unsigned)H5O_msg_raw_size(hdr->f, H5O_PLINE_ID, FALSE, &(hdr->pline)))) HGOTO_ERROR(H5E_HEAP, H5E_CANTGETSIZE, HADDR_UNDEF, "can't get I/O filter pipeline size") /* Compute size of header on disk */ - hdr->heap_size = H5HF_HEADER_SIZE(hdr) /* Base header size */ - + hdr->sizeof_size /* Size of size for filtered root direct block */ - + 4 /* Size of filter mask for filtered root direct block */ - + hdr->filter_len; /* Size of encoded I/O filter info */ - } /* end if */ + hdr->heap_size = H5HF_HEADER_SIZE(hdr) /* Base header size */ + + hdr->sizeof_size /* Size of size for filtered root direct block */ + + 4 /* Size of filter mask for filtered root direct block */ + + hdr->filter_len; /* Size of encoded I/O filter info */ + } /* end if */ else { /* Set size of header on disk */ hdr->heap_size = H5HF_HEADER_SIZE(hdr); @@ -446,30 +433,34 @@ H5HF__hdr_create(H5F_t *f, const H5HF_create_t *cparam) * routines are also called from the cache 'load' callback, and the ID * length is already set in that case (its stored in the header on disk)) */ - switch(cparam->id_len) { - case 0: /* Set the length of heap IDs to just enough to hold the offset & length of 'normal' objects in the heap */ + switch (cparam->id_len) { + case 0: /* Set the length of heap IDs to just enough to hold the offset & length of 'normal' objects + in the heap */ hdr->id_len = (unsigned)1 + hdr->heap_off_size + hdr->heap_len_size; break; - case 1: /* Set the length of heap IDs to just enough to hold the information needed to directly access 'huge' objects in the heap */ - if(hdr->filter_len > 0) - hdr->id_len = (unsigned)1 /* ID flags */ - + hdr->sizeof_addr /* Address of filtered object */ - + hdr->sizeof_size /* Length of filtered object */ - + 4 /* Filter mask for filtered object */ - + hdr->sizeof_size; /* Size of de-filtered object in memory */ + case 1: /* Set the length of heap IDs to just enough to hold the information needed to directly access + 'huge' objects in the heap */ + if (hdr->filter_len > 0) + hdr->id_len = (unsigned)1 /* ID flags */ + + hdr->sizeof_addr /* Address of filtered object */ + + hdr->sizeof_size /* Length of filtered object */ + + 4 /* Filter mask for filtered object */ + + hdr->sizeof_size; /* Size of de-filtered object in memory */ else - hdr->id_len = (unsigned)1 /* ID flags */ - + hdr->sizeof_addr /* Address of object */ - + hdr->sizeof_size; /* Length of object */ + hdr->id_len = (unsigned)1 /* ID flags */ + + hdr->sizeof_addr /* Address of object */ + + hdr->sizeof_size; /* Length of object */ break; - default: /* Use the requested size for the heap ID */ + default: /* Use the requested size for the heap ID */ /* Check boundaries */ - if(cparam->id_len < (1 + hdr->heap_off_size + hdr->heap_len_size)) - HGOTO_ERROR(H5E_HEAP, H5E_BADRANGE, HADDR_UNDEF, "ID length not large enough to hold object IDs") - else if(cparam->id_len > H5HF_MAX_ID_LEN) - HGOTO_ERROR(H5E_HEAP, H5E_BADRANGE, HADDR_UNDEF, "ID length too large to store tiny object lengths") + if (cparam->id_len < (1 + hdr->heap_off_size + hdr->heap_len_size)) + HGOTO_ERROR(H5E_HEAP, H5E_BADRANGE, HADDR_UNDEF, + "ID length not large enough to hold object IDs") + else if (cparam->id_len > H5HF_MAX_ID_LEN) + HGOTO_ERROR(H5E_HEAP, H5E_BADRANGE, HADDR_UNDEF, + "ID length too large to store tiny object lengths") /* Use the requested size for the heap ID */ hdr->id_len = cparam->id_len; @@ -478,35 +469,36 @@ H5HF__hdr_create(H5F_t *f, const H5HF_create_t *cparam) /* Second phase of header final initialization */ /* (needs ID and filter lengths set up) */ - if(H5HF__hdr_finish_init_phase2(hdr) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, "can't finish phase #2 of header final initialization") + if (H5HF__hdr_finish_init_phase2(hdr) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, + "can't finish phase #2 of header final initialization") /* Extra checking for possible gap between max. direct block size minus * overhead and "huge" object size */ dblock_overhead = H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr); - if((cparam->managed.max_direct_size - dblock_overhead) < cparam->max_man_size) - HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, "max. direct block size not large enough to hold all managed blocks") + if ((cparam->managed.max_direct_size - dblock_overhead) < cparam->max_man_size) + HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, HADDR_UNDEF, + "max. direct block size not large enough to hold all managed blocks") /* Allocate space for the header on disk */ - if(HADDR_UNDEF == (hdr->heap_addr = H5MF_alloc(f, H5FD_MEM_FHEAP_HDR, (hsize_t)hdr->heap_size))) + if (HADDR_UNDEF == (hdr->heap_addr = H5MF_alloc(f, H5FD_MEM_FHEAP_HDR, (hsize_t)hdr->heap_size))) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "file allocation failed for fractal heap header") /* Cache the new fractal heap header */ - if(H5AC_insert_entry(f, H5AC_FHEAP_HDR, hdr->heap_addr, hdr, H5AC__NO_FLAGS_SET) < 0) + if (H5AC_insert_entry(f, H5AC_FHEAP_HDR, hdr->heap_addr, hdr, H5AC__NO_FLAGS_SET) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINSERT, HADDR_UNDEF, "can't add fractal heap header to cache") /* Set address of heap header to return */ ret_value = hdr->heap_addr; done: - if(!H5F_addr_defined(ret_value) && hdr) - if(H5HF__hdr_free(hdr) < 0) + if (!H5F_addr_defined(ret_value) && hdr) + if (H5HF__hdr_free(hdr) < 0) HDONE_ERROR(H5E_HEAP, H5E_CANTRELEASE, HADDR_UNDEF, "unable to release fractal heap header") FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_create() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_protect * @@ -522,9 +514,9 @@ done: H5HF_hdr_t * H5HF__hdr_protect(H5F_t *f, haddr_t addr, unsigned flags) { - H5HF_hdr_cache_ud_t cache_udata; /* User-data for callback */ - H5HF_hdr_t *hdr; /* Fractal heap header */ - H5HF_hdr_t *ret_value = NULL; /* Return value */ + H5HF_hdr_cache_ud_t cache_udata; /* User-data for callback */ + H5HF_hdr_t * hdr; /* Fractal heap header */ + H5HF_hdr_t * ret_value = NULL; /* Return value */ FUNC_ENTER_PACKAGE @@ -539,7 +531,7 @@ H5HF__hdr_protect(H5F_t *f, haddr_t addr, unsigned flags) cache_udata.f = f; /* Lock the heap header into memory */ - if(NULL == (hdr = (H5HF_hdr_t *)H5AC_protect(f, H5AC_FHEAP_HDR, addr, &cache_udata, flags))) + if (NULL == (hdr = (H5HF_hdr_t *)H5AC_protect(f, H5AC_FHEAP_HDR, addr, &cache_udata, flags))) HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, NULL, "unable to protect fractal heap header") /* Set the header's address */ @@ -555,7 +547,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_protect() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_incr * @@ -571,7 +562,7 @@ done: herr_t H5HF__hdr_incr(H5HF_hdr_t *hdr) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -579,8 +570,8 @@ H5HF__hdr_incr(H5HF_hdr_t *hdr) HDassert(hdr); /* Mark header as un-evictable when a block is depending on it */ - if(hdr->rc == 0) - if(H5AC_pin_protected_entry(hdr) < 0) + if (hdr->rc == 0) + if (H5AC_pin_protected_entry(hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTPIN, FAIL, "unable to pin fractal heap header") /* Increment reference count on shared header */ @@ -590,7 +581,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_incr() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_decr * @@ -606,7 +596,7 @@ done: herr_t H5HF__hdr_decr(H5HF_hdr_t *hdr) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -618,9 +608,9 @@ H5HF__hdr_decr(H5HF_hdr_t *hdr) hdr->rc--; /* Mark header as evictable again when no child blocks depend on it */ - if(hdr->rc == 0) { + if (hdr->rc == 0) { HDassert(hdr->file_rc == 0); - if(H5AC_unpin_entry(hdr) < 0) + if (H5AC_unpin_entry(hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPIN, FAIL, "unable to unpin fractal heap header") } /* end if */ @@ -628,7 +618,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_decr() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_fuse_incr * @@ -655,7 +644,6 @@ H5HF__hdr_fuse_incr(H5HF_hdr_t *hdr) FUNC_LEAVE_NOAPI(SUCCEED) } /* end H5HF__hdr_fuse_incr() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_fuse_decr * @@ -683,7 +671,6 @@ H5HF__hdr_fuse_decr(H5HF_hdr_t *hdr) FUNC_LEAVE_NOAPI(hdr->file_rc) } /* end H5HF__hdr_fuse_decr() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_dirty * @@ -699,7 +686,7 @@ H5HF__hdr_fuse_decr(H5HF_hdr_t *hdr) herr_t H5HF__hdr_dirty(H5HF_hdr_t *hdr) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -707,19 +694,18 @@ H5HF__hdr_dirty(H5HF_hdr_t *hdr) HDassert(hdr); /* Resize pinned header in cache if I/O filter is present. */ - if(hdr->filter_len > 0) - if(H5AC_resize_entry(hdr, (size_t)hdr->heap_size) < 0) + if (hdr->filter_len > 0) + if (H5AC_resize_entry(hdr, (size_t)hdr->heap_size) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, FAIL, "unable to resize fractal heap header") /* Mark header as dirty in cache */ - if(H5AC_mark_entry_dirty(hdr) < 0) + if (H5AC_mark_entry_dirty(hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTMARKDIRTY, FAIL, "unable to mark fractal heap header as dirty") done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_dirty() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_adj_free * @@ -735,7 +721,7 @@ done: herr_t H5HF__hdr_adj_free(H5HF_hdr_t *hdr, ssize_t amt) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -749,14 +735,13 @@ H5HF__hdr_adj_free(H5HF_hdr_t *hdr, ssize_t amt) hdr->total_man_free = (hsize_t)((hssize_t)hdr->total_man_free + amt); /* Mark heap header as modified */ - if(H5HF__hdr_dirty(hdr) < 0) + if (H5HF__hdr_dirty(hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTDIRTY, FAIL, "can't mark heap header as dirty") done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_adj_free() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_adjust_heap * @@ -772,7 +757,7 @@ done: herr_t H5HF__hdr_adjust_heap(H5HF_hdr_t *hdr, hsize_t new_size, hssize_t extra_free) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -789,14 +774,13 @@ H5HF__hdr_adjust_heap(H5HF_hdr_t *hdr, hsize_t new_size, hssize_t extra_free) hdr->total_man_free = (hsize_t)((hssize_t)hdr->total_man_free + extra_free); /* Mark heap header as modified */ - if(H5HF__hdr_dirty(hdr) < 0) + if (H5HF__hdr_dirty(hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTDIRTY, FAIL, "can't mark header as dirty") done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_adjust_heap() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_inc_alloc * @@ -826,7 +810,6 @@ H5HF__hdr_inc_alloc(H5HF_hdr_t *hdr, size_t alloc_size) FUNC_LEAVE_NOAPI(SUCCEED) } /* end H5HF__hdr_inc_alloc() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_start_iter * @@ -842,7 +825,7 @@ H5HF__hdr_inc_alloc(H5HF_hdr_t *hdr, size_t alloc_size) herr_t H5HF__hdr_start_iter(H5HF_hdr_t *hdr, H5HF_indirect_t *iblock, hsize_t curr_off, unsigned curr_entry) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -853,7 +836,7 @@ H5HF__hdr_start_iter(H5HF_hdr_t *hdr, H5HF_indirect_t *iblock, hsize_t curr_off, HDassert(iblock); /* Set up "next block" iterator at correct location */ - if(H5HF__man_iter_start_entry(hdr, &hdr->next_block, iblock, curr_entry) < 0) + if (H5HF__man_iter_start_entry(hdr, &hdr->next_block, iblock, curr_entry) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't initialize block iterator") /* Set the offset of the iterator in the heap */ @@ -863,7 +846,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_start_iter() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_reset_iter * @@ -879,7 +861,7 @@ done: herr_t H5HF__hdr_reset_iter(H5HF_hdr_t *hdr, hsize_t curr_off) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -889,7 +871,7 @@ H5HF__hdr_reset_iter(H5HF_hdr_t *hdr, hsize_t curr_off) HDassert(hdr); /* Reset "next block" iterator */ - if(H5HF__man_iter_reset(&hdr->next_block) < 0) + if (H5HF__man_iter_reset(&hdr->next_block) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRELEASE, FAIL, "can't reset block iterator") /* Set the offset of the iterator in the heap */ @@ -899,7 +881,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_reset_iter() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_skip_blocks * @@ -913,12 +894,11 @@ done: *------------------------------------------------------------------------- */ herr_t -H5HF__hdr_skip_blocks(H5HF_hdr_t *hdr, H5HF_indirect_t *iblock, - unsigned start_entry, unsigned nentries) +H5HF__hdr_skip_blocks(H5HF_hdr_t *hdr, H5HF_indirect_t *iblock, unsigned start_entry, unsigned nentries) { - unsigned row, col; /* Row & column of entry */ - hsize_t sect_size; /* Size of section in heap space */ - herr_t ret_value = SUCCEED; /* Return value */ + unsigned row, col; /* Row & column of entry */ + hsize_t sect_size; /* Size of section in heap space */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -930,24 +910,24 @@ H5HF__hdr_skip_blocks(H5HF_hdr_t *hdr, H5HF_indirect_t *iblock, HDassert(nentries); /* Compute the span within the heap to skip */ - row = start_entry / hdr->man_dtable.cparam.width; - col = start_entry % hdr->man_dtable.cparam.width; + row = start_entry / hdr->man_dtable.cparam.width; + col = start_entry % hdr->man_dtable.cparam.width; sect_size = H5HF__dtable_span_size(&hdr->man_dtable, row, col, nentries); HDassert(sect_size > 0); /* Advance the new block iterator */ - if(H5HF__hdr_inc_iter(hdr, sect_size, nentries) < 0) + if (H5HF__hdr_inc_iter(hdr, sect_size, nentries) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRELEASE, FAIL, "can't increase allocated heap size") /* Add 'indirect' section for blocks skipped in this row */ - if(H5HF__sect_indirect_add(hdr, iblock, start_entry, nentries) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "can't create indirect section for indirect block's free space") + if (H5HF__sect_indirect_add(hdr, iblock, start_entry, nentries) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, + "can't create indirect section for indirect block's free space") done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_skip_blocks() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_update_iter * @@ -966,7 +946,7 @@ done: herr_t H5HF__hdr_update_iter(H5HF_hdr_t *hdr, size_t min_dblock_size) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -977,49 +957,49 @@ H5HF__hdr_update_iter(H5HF_hdr_t *hdr, size_t min_dblock_size) HDassert(min_dblock_size > 0); /* Check for creating first indirect block */ - if(hdr->man_dtable.curr_root_rows == 0) { - if(H5HF__man_iblock_root_create(hdr, min_dblock_size) < 0) + if (hdr->man_dtable.curr_root_rows == 0) { + if (H5HF__man_iblock_root_create(hdr, min_dblock_size) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTEXTEND, FAIL, "unable to create root indirect block") } /* end if */ else { - H5HF_indirect_t *iblock; /* Pointer to indirect block */ - hbool_t walked_up, walked_down; /* Condition variables for finding direct block location */ - unsigned next_row; /* Iterator's next block row */ - unsigned next_entry; /* Iterator's next block entry */ - unsigned min_dblock_row; /* Minimum row for direct block size request */ + H5HF_indirect_t *iblock; /* Pointer to indirect block */ + hbool_t walked_up, walked_down; /* Condition variables for finding direct block location */ + unsigned next_row; /* Iterator's next block row */ + unsigned next_entry; /* Iterator's next block entry */ + unsigned min_dblock_row; /* Minimum row for direct block size request */ /* Compute min. row for direct block requested */ min_dblock_row = H5HF__dtable_size_to_row(&hdr->man_dtable, min_dblock_size); /* Initialize block iterator, if necessary */ - if(!H5HF__man_iter_ready(&hdr->next_block)) { + if (!H5HF__man_iter_ready(&hdr->next_block)) { /* Start iterator with previous offset of iterator */ - if(H5HF__man_iter_start_offset(hdr, &hdr->next_block, hdr->man_iter_off) < 0) + if (H5HF__man_iter_start_offset(hdr, &hdr->next_block, hdr->man_iter_off) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "unable to set block iterator location") } /* end if */ /* Get information about current iterator location */ - if(H5HF__man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0) + if (H5HF__man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to retrieve current block iterator location") /* Check for skipping over blocks in the current block */ - if(min_dblock_row > next_row && next_row < iblock->nrows) { - unsigned min_entry; /* Min entry for direct block requested */ - unsigned skip_entries; /* Number of entries to skip in the current block */ + if (min_dblock_row > next_row && next_row < iblock->nrows) { + unsigned min_entry; /* Min entry for direct block requested */ + unsigned skip_entries; /* Number of entries to skip in the current block */ /* Compute the number of entries to skip in the current block */ min_entry = min_dblock_row * hdr->man_dtable.cparam.width; - if(min_dblock_row >= iblock->nrows) + if (min_dblock_row >= iblock->nrows) skip_entries = (iblock->nrows * hdr->man_dtable.cparam.width) - next_entry; else skip_entries = min_entry - next_entry; /* Add skipped direct blocks to heap's free space */ - if(H5HF__hdr_skip_blocks(hdr, iblock, next_entry, skip_entries) < 0) + if (H5HF__hdr_skip_blocks(hdr, iblock, next_entry, skip_entries) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, "can't add skipped blocks to heap's free space") /* Get information about new iterator location */ - if(H5HF__man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0) + if (H5HF__man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to retrieve current block iterator location") } /* end if */ @@ -1029,25 +1009,27 @@ H5HF__hdr_update_iter(H5HF_hdr_t *hdr, size_t min_dblock_size) /* Check for walking off end of indirect block */ /* (walk up iterator) */ - while(next_row >= iblock->nrows) { + while (next_row >= iblock->nrows) { /* Check for needing to expand root indirect block */ - if(iblock->parent == NULL) { - if(H5HF__man_iblock_root_double(hdr, min_dblock_size) < 0) + if (iblock->parent == NULL) { + if (H5HF__man_iblock_root_double(hdr, min_dblock_size) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTEXTEND, FAIL, "unable to double root indirect block") } /* end if */ else { /* Move iterator up one level */ - if(H5HF__man_iter_up(&hdr->next_block) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTNEXT, FAIL, "unable to advance current block iterator location") + if (H5HF__man_iter_up(&hdr->next_block) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTNEXT, FAIL, + "unable to advance current block iterator location") /* Increment location of next block at this level */ - if(H5HF__man_iter_next(hdr, &hdr->next_block, 1) < 0) + if (H5HF__man_iter_next(hdr, &hdr->next_block, 1) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINC, FAIL, "can't advance fractal heap block location") } /* end else */ /* Get information about new iterator location */ - if(H5HF__man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to retrieve current block iterator location") + if (H5HF__man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, + "unable to retrieve current block iterator location") /* Indicate that we walked up */ walked_up = TRUE; @@ -1055,80 +1037,93 @@ H5HF__hdr_update_iter(H5HF_hdr_t *hdr, size_t min_dblock_size) /* Check for walking into child indirect block */ /* (walk down iterator) */ - if(next_row >= hdr->man_dtable.max_direct_rows) { - unsigned child_nrows; /* Number of rows in new indirect block */ + if (next_row >= hdr->man_dtable.max_direct_rows) { + unsigned child_nrows; /* Number of rows in new indirect block */ HDassert(!H5F_addr_defined(iblock->ents[next_entry].addr)); /* Compute # of rows in next child indirect block to use */ - child_nrows = H5HF__dtable_size_to_rows(&hdr->man_dtable, hdr->man_dtable.row_block_size[next_row]); + child_nrows = + H5HF__dtable_size_to_rows(&hdr->man_dtable, hdr->man_dtable.row_block_size[next_row]); /* Check for skipping over indirect blocks */ /* (that don't have direct blocks large enough to hold direct block size requested) */ - if(hdr->man_dtable.row_block_size[child_nrows - 1] < min_dblock_size) { - unsigned child_rows_needed; /* Number of rows needed to hold direct block */ - unsigned child_entry; /* Entry of child indirect block */ + if (hdr->man_dtable.row_block_size[child_nrows - 1] < min_dblock_size) { + unsigned child_rows_needed; /* Number of rows needed to hold direct block */ + unsigned child_entry; /* Entry of child indirect block */ /* Compute # of rows needed in child indirect block */ - child_rows_needed = (H5VM_log2_of2((uint32_t)min_dblock_size) - H5VM_log2_of2((uint32_t)hdr->man_dtable.cparam.start_block_size)) + 2; + child_rows_needed = (H5VM_log2_of2((uint32_t)min_dblock_size) - + H5VM_log2_of2((uint32_t)hdr->man_dtable.cparam.start_block_size)) + + 2; HDassert(child_rows_needed > child_nrows); - child_entry = (next_row + (child_rows_needed - child_nrows)) * hdr->man_dtable.cparam.width; - if(child_entry > (iblock->nrows * hdr->man_dtable.cparam.width)) + child_entry = + (next_row + (child_rows_needed - child_nrows)) * hdr->man_dtable.cparam.width; + if (child_entry > (iblock->nrows * hdr->man_dtable.cparam.width)) child_entry = iblock->nrows * hdr->man_dtable.cparam.width; /* Add skipped indirect blocks to heap's free space */ - if(H5HF__hdr_skip_blocks(hdr, iblock, next_entry, (child_entry - next_entry)) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, "can't add skipped blocks to heap's free space") + if (H5HF__hdr_skip_blocks(hdr, iblock, next_entry, (child_entry - next_entry)) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, + "can't add skipped blocks to heap's free space") } /* end if */ else { - H5HF_indirect_t *new_iblock; /* Pointer to new indirect block */ - hbool_t did_protect; /* Whether we protected the indirect block or not */ - haddr_t new_iblock_addr; /* New indirect block's address */ + H5HF_indirect_t *new_iblock; /* Pointer to new indirect block */ + hbool_t did_protect; /* Whether we protected the indirect block or not */ + haddr_t new_iblock_addr; /* New indirect block's address */ /* Allocate new indirect block */ - if(H5HF__man_iblock_create(hdr, iblock, next_entry, child_nrows, child_nrows, &new_iblock_addr) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, "can't allocate fractal heap indirect block") + if (H5HF__man_iblock_create(hdr, iblock, next_entry, child_nrows, child_nrows, + &new_iblock_addr) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTALLOC, FAIL, + "can't allocate fractal heap indirect block") /* Lock new indirect block */ - if(NULL == (new_iblock = H5HF__man_iblock_protect(hdr, new_iblock_addr, child_nrows, iblock, next_entry, FALSE, H5AC__NO_FLAGS_SET, &did_protect))) - HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to protect fractal heap indirect block") + if (NULL == (new_iblock = H5HF__man_iblock_protect(hdr, new_iblock_addr, child_nrows, + iblock, next_entry, FALSE, + H5AC__NO_FLAGS_SET, &did_protect))) + HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, + "unable to protect fractal heap indirect block") /* Move iterator down one level (pins indirect block) */ - if(H5HF__man_iter_down(&hdr->next_block, new_iblock) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTNEXT, FAIL, "unable to advance current block iterator location") + if (H5HF__man_iter_down(&hdr->next_block, new_iblock) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTNEXT, FAIL, + "unable to advance current block iterator location") /* Check for skipping over rows and add free section for skipped rows */ - if(min_dblock_size > hdr->man_dtable.cparam.start_block_size) { - unsigned new_entry; /* Entry of direct block which is large enough */ + if (min_dblock_size > hdr->man_dtable.cparam.start_block_size) { + unsigned new_entry; /* Entry of direct block which is large enough */ /* Compute entry for direct block size requested */ new_entry = hdr->man_dtable.cparam.width * min_dblock_row; /* Add skipped blocks to heap's free space */ - if(H5HF__hdr_skip_blocks(hdr, new_iblock, 0, new_entry) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, "can't add skipped blocks to heap's free space") + if (H5HF__hdr_skip_blocks(hdr, new_iblock, 0, new_entry) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, + "can't add skipped blocks to heap's free space") } /* end if */ /* Unprotect child indirect block */ - if(H5HF__man_iblock_unprotect(new_iblock, H5AC__NO_FLAGS_SET, did_protect) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release fractal heap indirect block") + if (H5HF__man_iblock_unprotect(new_iblock, H5AC__NO_FLAGS_SET, did_protect) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, + "unable to release fractal heap indirect block") } /* end else */ /* Get information about new iterator location */ - if(H5HF__man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to retrieve current block iterator location") + if (H5HF__man_iter_curr(&hdr->next_block, &next_row, NULL, &next_entry, &iblock) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, + "unable to retrieve current block iterator location") /* Indicate that we walked down */ walked_down = TRUE; } /* end if */ - } while(walked_down || walked_up); + } while (walked_down || walked_up); } /* end else */ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_update_iter() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_inc_iter * @@ -1144,7 +1139,7 @@ done: herr_t H5HF__hdr_inc_iter(H5HF_hdr_t *hdr, hsize_t adv_size, unsigned nentries) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -1155,8 +1150,8 @@ H5HF__hdr_inc_iter(H5HF_hdr_t *hdr, hsize_t adv_size, unsigned nentries) HDassert(nentries); /* Advance the iterator for the current location within the indirect block */ - if(hdr->next_block.curr) - if(H5HF__man_iter_next(hdr, &hdr->next_block, nentries) < 0) + if (hdr->next_block.curr) + if (H5HF__man_iter_next(hdr, &hdr->next_block, nentries) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTNEXT, FAIL, "unable to advance current block iterator location") /* Increment the offset of the iterator in the heap */ @@ -1166,7 +1161,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_inc_iter() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_reverse_iter * @@ -1183,11 +1177,11 @@ done: herr_t H5HF__hdr_reverse_iter(H5HF_hdr_t *hdr, haddr_t dblock_addr) { - H5HF_indirect_t *iblock; /* Indirect block where iterator is located */ - unsigned curr_entry; /* Current entry for iterator */ - hbool_t walked_down; /* Loop flag */ - hbool_t walked_up; /* Loop flag */ - herr_t ret_value = SUCCEED; /* Return value */ + H5HF_indirect_t *iblock; /* Indirect block where iterator is located */ + unsigned curr_entry; /* Current entry for iterator */ + hbool_t walked_down; /* Loop flag */ + hbool_t walked_up; /* Loop flag */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -1197,15 +1191,15 @@ H5HF__hdr_reverse_iter(H5HF_hdr_t *hdr, haddr_t dblock_addr) HDassert(hdr); /* Initialize block iterator, if necessary */ - if(!H5HF__man_iter_ready(&hdr->next_block)) + if (!H5HF__man_iter_ready(&hdr->next_block)) /* Start iterator with previous offset of iterator */ - if(H5HF__man_iter_start_offset(hdr, &hdr->next_block, hdr->man_iter_off) < 0) + if (H5HF__man_iter_start_offset(hdr, &hdr->next_block, hdr->man_iter_off) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "unable to set block iterator location") /* Walk backwards through heap, looking for direct block to place iterator after */ /* Get information about current iterator location */ - if(H5HF__man_iter_curr(&hdr->next_block, NULL, NULL, &curr_entry, &iblock) < 0) + if (H5HF__man_iter_curr(&hdr->next_block, NULL, NULL, &curr_entry, &iblock) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to retrieve current block iterator information") /* Move current iterator position backwards once */ @@ -1213,30 +1207,31 @@ H5HF__hdr_reverse_iter(H5HF_hdr_t *hdr, haddr_t dblock_addr) /* Search backwards in the heap address space for direct block to latch onto */ do { - int tmp_entry; /* Temp. entry for iterator (use signed value to detect errors) */ + int tmp_entry; /* Temp. entry for iterator (use signed value to detect errors) */ /* Reset loop flags */ walked_down = FALSE; - walked_up = FALSE; + walked_up = FALSE; /* Walk backwards through entries, until we find one that has a child */ /* (Skip direct block that will be deleted, if we find it) */ tmp_entry = (int)curr_entry; - while(tmp_entry >= 0 && - (H5F_addr_eq(iblock->ents[tmp_entry].addr, dblock_addr) || - !H5F_addr_defined(iblock->ents[tmp_entry].addr))) + while (tmp_entry >= 0 && (H5F_addr_eq(iblock->ents[tmp_entry].addr, dblock_addr) || + !H5F_addr_defined(iblock->ents[tmp_entry].addr))) tmp_entry--; /* Check for no earlier blocks in this indirect block */ - if(tmp_entry < 0) { + if (tmp_entry < 0) { /* Check for parent of current indirect block */ - if(iblock->parent) { + if (iblock->parent) { /* Move iterator to parent of current block */ - if(H5HF__man_iter_up(&hdr->next_block) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTNEXT, FAIL, "unable to move current block iterator location up") + if (H5HF__man_iter_up(&hdr->next_block) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTNEXT, FAIL, + "unable to move current block iterator location up") /* Get information about current iterator location */ - if(H5HF__man_iter_curr(&hdr->next_block, NULL, NULL, &curr_entry, &iblock) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to retrieve current block iterator information") + if (H5HF__man_iter_curr(&hdr->next_block, NULL, NULL, &curr_entry, &iblock) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, + "unable to retrieve current block iterator information") /* Move current iterator position backwards once */ curr_entry--; @@ -1249,69 +1244,76 @@ H5HF__hdr_reverse_iter(H5HF_hdr_t *hdr, haddr_t dblock_addr) hdr->man_iter_off = 0; /* Reset 'next block' iterator */ - if(H5HF__man_iter_reset(&hdr->next_block) < 0) + if (H5HF__man_iter_reset(&hdr->next_block) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRELEASE, FAIL, "can't reset block iterator") } /* end else */ - } /* end if */ + } /* end if */ else { - unsigned row; /* Row for entry */ + unsigned row; /* Row for entry */ curr_entry = (unsigned)tmp_entry; /* Check if entry is for a direct block */ row = curr_entry / hdr->man_dtable.cparam.width; - if(row < hdr->man_dtable.max_direct_rows) { + if (row < hdr->man_dtable.max_direct_rows) { /* Increment entry to empty location */ curr_entry++; /* Set the current location of the iterator to next entry after the existing direct block */ - if(H5HF__man_iter_set_entry(hdr, &hdr->next_block, curr_entry) < 0) + if (H5HF__man_iter_set_entry(hdr, &hdr->next_block, curr_entry) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTSET, FAIL, "unable to set current block iterator location") /* Update iterator offset */ hdr->man_iter_off = iblock->block_off; hdr->man_iter_off += hdr->man_dtable.row_block_off[curr_entry / hdr->man_dtable.cparam.width]; - hdr->man_iter_off += hdr->man_dtable.row_block_size[curr_entry / hdr->man_dtable.cparam.width] * (curr_entry % hdr->man_dtable.cparam.width); + hdr->man_iter_off += + hdr->man_dtable.row_block_size[curr_entry / hdr->man_dtable.cparam.width] * + (curr_entry % hdr->man_dtable.cparam.width); } /* end if */ else { - H5HF_indirect_t *child_iblock; /* Pointer to child indirect block */ - hbool_t did_protect; /* Whether we protected the indirect block or not */ - unsigned child_nrows; /* # of rows in child block */ + H5HF_indirect_t *child_iblock; /* Pointer to child indirect block */ + hbool_t did_protect; /* Whether we protected the indirect block or not */ + unsigned child_nrows; /* # of rows in child block */ /* Compute # of rows in next child indirect block to use */ - child_nrows = H5HF__dtable_size_to_rows(&hdr->man_dtable, hdr->man_dtable.row_block_size[row]); + child_nrows = + H5HF__dtable_size_to_rows(&hdr->man_dtable, hdr->man_dtable.row_block_size[row]); /* Lock child indirect block */ - if(NULL == (child_iblock = H5HF__man_iblock_protect(hdr, iblock->ents[curr_entry].addr, child_nrows, iblock, curr_entry, FALSE, H5AC__NO_FLAGS_SET, &did_protect))) - HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to protect fractal heap indirect block") + if (NULL == (child_iblock = H5HF__man_iblock_protect(hdr, iblock->ents[curr_entry].addr, + child_nrows, iblock, curr_entry, FALSE, + H5AC__NO_FLAGS_SET, &did_protect))) + HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, + "unable to protect fractal heap indirect block") /* Set the current location of the iterator */ - if(H5HF__man_iter_set_entry(hdr, &hdr->next_block, curr_entry) < 0) + if (H5HF__man_iter_set_entry(hdr, &hdr->next_block, curr_entry) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTSET, FAIL, "unable to set current block iterator location") /* Walk down into child indirect block (pins child block) */ - if(H5HF__man_iter_down(&hdr->next_block, child_iblock) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTNEXT, FAIL, "unable to advance current block iterator location") + if (H5HF__man_iter_down(&hdr->next_block, child_iblock) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTNEXT, FAIL, + "unable to advance current block iterator location") /* Update iterator location */ - iblock = child_iblock; + iblock = child_iblock; curr_entry = (child_iblock->nrows * hdr->man_dtable.cparam.width) - 1; /* Unprotect child indirect block */ - if(H5HF__man_iblock_unprotect(child_iblock, H5AC__NO_FLAGS_SET, did_protect) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release fractal heap indirect block") + if (H5HF__man_iblock_unprotect(child_iblock, H5AC__NO_FLAGS_SET, did_protect) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, + "unable to release fractal heap indirect block") /* Note that we walked down */ walked_down = TRUE; } /* end else */ - } /* end else */ - } while(walked_down || walked_up); + } /* end else */ + } while (walked_down || walked_up); done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_reverse_iter() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_empty * @@ -1327,7 +1329,7 @@ done: herr_t H5HF__hdr_empty(H5HF_hdr_t *hdr) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -1335,17 +1337,17 @@ H5HF__hdr_empty(H5HF_hdr_t *hdr) HDassert(hdr); /* Reset block iterator, if necessary */ - if(H5HF__man_iter_ready(&hdr->next_block)) - if(H5HF__man_iter_reset(&hdr->next_block) < 0) + if (H5HF__man_iter_ready(&hdr->next_block)) + if (H5HF__man_iter_reset(&hdr->next_block) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTRELEASE, FAIL, "can't reset block iterator") /* Shrink managed heap size */ - hdr->man_size = 0; + hdr->man_size = 0; hdr->man_alloc_size = 0; /* Reset root pointer information */ hdr->man_dtable.curr_root_rows = 0; - hdr->man_dtable.table_addr = HADDR_UNDEF; + hdr->man_dtable.table_addr = HADDR_UNDEF; /* Reset the 'next block' iterator location */ hdr->man_iter_off = 0; @@ -1354,14 +1356,13 @@ H5HF__hdr_empty(H5HF_hdr_t *hdr) hdr->total_man_free = 0; /* Mark heap header as modified */ - if(H5HF__hdr_dirty(hdr) < 0) + if (H5HF__hdr_dirty(hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTDIRTY, FAIL, "can't mark header as dirty") done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_empty() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_free * @@ -1377,7 +1378,7 @@ done: herr_t H5HF__hdr_free(H5HF_hdr_t *hdr) { - herr_t ret_value = SUCCEED; /* Return value */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -1387,12 +1388,12 @@ H5HF__hdr_free(H5HF_hdr_t *hdr) HDassert(hdr); /* Free the block size lookup table for the doubling table */ - if(H5HF__dtable_dest(&hdr->man_dtable) < 0) + if (H5HF__dtable_dest(&hdr->man_dtable) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy fractal heap doubling table") /* Release any I/O pipeline filter information */ - if(hdr->pline.nused) - if(H5O_msg_reset(H5O_PLINE_ID, &(hdr->pline)) < 0) + if (hdr->pline.nused) + if (H5O_msg_reset(H5O_PLINE_ID, &(hdr->pline)) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to reset I/O pipeline message") /* Free the shared info itself */ @@ -1402,7 +1403,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_free() */ - /*------------------------------------------------------------------------- * Function: H5HF__hdr_delete * @@ -1418,8 +1418,8 @@ done: herr_t H5HF__hdr_delete(H5HF_hdr_t *hdr) { - unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting heap header */ - herr_t ret_value = SUCCEED; /* Return value */ + unsigned cache_flags = H5AC__NO_FLAGS_SET; /* Flags for unprotecting heap header */ + herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_PACKAGE @@ -1430,61 +1430,64 @@ H5HF__hdr_delete(H5HF_hdr_t *hdr) HDassert(!hdr->file_rc); #ifndef NDEBUG -{ - unsigned hdr_status = 0; /* Heap header's status in the metadata cache */ + { + unsigned hdr_status = 0; /* Heap header's status in the metadata cache */ - /* Check the heap header's status in the metadata cache */ - if(H5AC_get_entry_status(hdr->f, hdr->heap_addr, &hdr_status) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to check metadata cache status for heap header") + /* Check the heap header's status in the metadata cache */ + if (H5AC_get_entry_status(hdr->f, hdr->heap_addr, &hdr_status) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "unable to check metadata cache status for heap header") - /* Sanity checks on heap header */ - HDassert(hdr_status & H5AC_ES__IN_CACHE); - HDassert(hdr_status & H5AC_ES__IS_PROTECTED); -} /* end block */ + /* Sanity checks on heap header */ + HDassert(hdr_status & H5AC_ES__IN_CACHE); + HDassert(hdr_status & H5AC_ES__IS_PROTECTED); + } /* end block */ #endif /* NDEBUG */ /* Check for free space manager for heap */ /* (must occur before attempting to delete the heap, so indirect blocks * will get unpinned) */ - if(H5F_addr_defined(hdr->fs_addr)) + if (H5F_addr_defined(hdr->fs_addr)) /* Delete free space manager for heap */ - if(H5HF__space_delete(hdr) < 0) + if (H5HF__space_delete(hdr) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to release fractal heap free space manager") /* Check for root direct/indirect block */ - if(H5F_addr_defined(hdr->man_dtable.table_addr)) { - if(hdr->man_dtable.curr_root_rows == 0) { - hsize_t dblock_size; /* Size of direct block on disk */ + if (H5F_addr_defined(hdr->man_dtable.table_addr)) { + if (hdr->man_dtable.curr_root_rows == 0) { + hsize_t dblock_size; /* Size of direct block on disk */ /* Check for I/O filters on this heap */ - if(hdr->filter_len > 0) { + if (hdr->filter_len > 0) { /* Set the dblock's size */ dblock_size = hdr->pline_root_direct_size; /* Reset the header's pipeline information */ - hdr->pline_root_direct_size = 0; + hdr->pline_root_direct_size = 0; hdr->pline_root_direct_filter_mask = 0; } /* end if */ else dblock_size = hdr->man_dtable.cparam.start_block_size; /* Delete root direct block */ - if(H5HF__man_dblock_delete(hdr->f, hdr->man_dtable.table_addr, dblock_size) < 0) + if (H5HF__man_dblock_delete(hdr->f, hdr->man_dtable.table_addr, dblock_size) < 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to release fractal heap root direct block") } /* end if */ else { /* Delete root indirect block */ - if(H5HF__man_iblock_delete(hdr, hdr->man_dtable.table_addr, hdr->man_dtable.curr_root_rows, NULL, 0) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to release fractal heap root indirect block") + if (H5HF__man_iblock_delete(hdr, hdr->man_dtable.table_addr, hdr->man_dtable.curr_root_rows, NULL, + 0) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, + "unable to release fractal heap root indirect block") } /* end else */ - } /* end if */ + } /* end if */ /* Check for 'huge' objects in heap */ - if(H5F_addr_defined(hdr->huge_bt2_addr)) { + if (H5F_addr_defined(hdr->huge_bt2_addr)) { /* Delete huge objects in heap and their tracker */ - if(H5HF__huge_delete(hdr) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to release fractal heap 'huge' objects and tracker") + if (H5HF__huge_delete(hdr) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, + "unable to release fractal heap 'huge' objects and tracker") } /* end if */ /* Indicate that the heap header should be deleted & file space freed */ @@ -1492,9 +1495,8 @@ H5HF__hdr_delete(H5HF_hdr_t *hdr) done: /* Unprotect the header with appropriate flags */ - if(H5AC_unprotect(hdr->f, H5AC_FHEAP_HDR, hdr->heap_addr, hdr, cache_flags) < 0) + if (H5AC_unprotect(hdr->f, H5AC_FHEAP_HDR, hdr->heap_addr, hdr, cache_flags) < 0) HDONE_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, "unable to release fractal heap header") FUNC_LEAVE_NOAPI(ret_value) } /* end H5HF__hdr_delete() */ - |