diff options
-rw-r--r-- | src/H5HF.c | 2 | ||||
-rw-r--r-- | src/H5HFcache.c | 58 | ||||
-rw-r--r-- | src/H5HFdbg.c | 12 | ||||
-rw-r--r-- | src/H5HFhdr.c | 14 | ||||
-rw-r--r-- | src/H5HFint.c | 50 | ||||
-rw-r--r-- | src/H5HFpkg.h | 31 | ||||
-rw-r--r-- | src/H5HFprivate.h | 11 | ||||
-rw-r--r-- | src/H5HFtest.c | 3 | ||||
-rw-r--r-- | test/fheap.c | 18 |
9 files changed, 94 insertions, 105 deletions
@@ -354,7 +354,7 @@ HDfprintf(stderr, "%s: size = %Zu\n", FUNC, size); hdr = fh->hdr; /* Check if object is large enough to be standalone */ - if(size > hdr->standalone_size) { + if(size > hdr->max_man_size) { HGOTO_ERROR(H5E_HEAP, H5E_UNSUPPORTED, FAIL, "standalone blocks not supported yet") } /* end if */ else { diff --git a/src/H5HFcache.c b/src/H5HFcache.c index bd96604..8c64a51 100644 --- a/src/H5HFcache.c +++ b/src/H5HFcache.c @@ -257,6 +257,7 @@ H5HF_cache_hdr_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *ud uint8_t *buf = NULL; /* Temporary buffer */ const uint8_t *p; /* Pointer into raw data buffer */ uint32_t metadata_chksum; /* Metadata checksum value */ + uint8_t heap_flags; /* Status flags for heap */ H5HF_hdr_t *ret_value; /* Return value */ FUNC_ENTER_NOAPI_NOINIT(H5HF_cache_hdr_load) @@ -308,21 +309,19 @@ HDfprintf(stderr, "%s: Load heap header, addr = %a\n", FUNC, addr); if(metadata_chksum != 0) HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "incorrect metadata checksum for fractal heap header") - /* Heap address mapping */ - hdr->addrmap = *p++; - HDassert(H5HF_ABSOLUTE == 0); - if(hdr->addrmap > H5HF_MAPPED) - HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "incorrect fractal heap address mapping") + /* Heap status flags */ + /* (bit 0: "huge" object IDs have wrapped) */ + heap_flags = *p++; + hdr->huge_ids_wrapped = heap_flags & H5HF_HDR_FLAGS_HUGE_ID_WRAPPED; - /* Min. size of standalone objects */ - UINT32DECODE(p, hdr->standalone_size); + /* "Huge" object information */ + UINT32DECODE(p, hdr->max_man_size); /* Max. size of "managed" objects */ + H5F_DECODE_LENGTH(f, p, hdr->huge_next_id); /* Next ID to use for "huge" object */ + H5F_addr_decode(f, &p, &hdr->huge_bt_addr); /* Address of "huge" object tracker B-tree */ - /* Internal management information */ - H5F_DECODE_LENGTH(f, p, hdr->total_man_free); - H5F_DECODE_LENGTH(f, p, hdr->total_std_free); - - /* Address of free section header */ - H5F_addr_decode(f, &p, &(hdr->fs_addr)); + /* "Managed" object free space information */ + H5F_DECODE_LENGTH(f, p, hdr->total_man_free); /* Internal free space in managed direct blocks */ + H5F_addr_decode(f, &p, &hdr->fs_addr); /* Address of free section header */ /* Statistics information */ H5F_DECODE_LENGTH(f, p, hdr->total_size); @@ -387,9 +386,10 @@ HDfprintf(stderr, "%s: Flushing heap header, addr = %a, destroy = %u\n", FUNC, a HDassert(hdr); if(hdr->cache_info.is_dirty) { - uint8_t *buf = NULL; /* Temporary raw data buffer */ - uint8_t *p; /* Pointer into raw data buffer */ - size_t size; /* Header size on disk */ + uint8_t *buf; /* Temporary raw data buffer */ + uint8_t *p; /* Pointer into raw data buffer */ + size_t size; /* Header size on disk */ + uint8_t heap_flags; /* Status flags for heap */ /* Sanity check */ HDassert(hdr->dirty); @@ -419,18 +419,20 @@ HDfprintf(stderr, "%s: Flushing heap header, addr = %a, destroy = %u\n", FUNC, a HDmemset(p, 0, 4); p += 4; - /* Heap address mapping */ - *p++ = hdr->addrmap; + /* Heap status flags */ + /* (bit 0: "huge" object IDs have wrapped) */ + heap_flags = 0; + heap_flags |= (hdr->huge_ids_wrapped ? H5HF_HDR_FLAGS_HUGE_ID_WRAPPED : 0); + *p++ = heap_flags; - /* Min. size of standalone objects */ - UINT32ENCODE(p, hdr->standalone_size); + /* "Huge" object information */ + UINT32ENCODE(p, hdr->max_man_size); /* Max. size of "managed" objects */ + H5F_ENCODE_LENGTH(f, p, hdr->huge_next_id); /* Next ID to use for "huge" object */ + H5F_addr_encode(f, &p, hdr->huge_bt_addr); /* Address of "huge" object tracker B-tree */ - /* Internal management information */ - H5F_ENCODE_LENGTH(f, p, hdr->total_man_free); - H5F_ENCODE_LENGTH(f, p, hdr->total_std_free); - - /* Address of free section header */ - H5F_addr_encode(f, &p, hdr->fs_addr); + /* "Managed" object free space information */ + H5F_ENCODE_LENGTH(f, p, hdr->total_man_free); /* Internal free space in managed direct blocks */ + H5F_addr_encode(f, &p, hdr->fs_addr); /* Address of free section header */ /* Statistics information */ H5F_ENCODE_LENGTH(f, p, hdr->total_size); @@ -731,10 +733,6 @@ H5HF_cache_dblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, /* Offset of block in heap */ UINT64ENCODE_VAR(p, dblock->block_off, hdr->heap_off_size); - /* Check for (currently) unsupported address mapping */ - if(hdr->addrmap != H5HF_ABSOLUTE) - HGOTO_ERROR(H5E_HEAP, H5E_UNSUPPORTED, FAIL, "encoding mapped direct blocks not supported currently") - /* Sanity check */ HDassert((size_t)(p - dblock->blk) == H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr)); diff --git a/src/H5HFdbg.c b/src/H5HFdbg.c index 1fc6b0f..452401a 100644 --- a/src/H5HFdbg.c +++ b/src/H5HFdbg.c @@ -212,21 +212,13 @@ H5HF_hdr_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, /* * Print the values. */ - HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth, - "Heap address mapping method:", - ((hdr->addrmap) == H5HF_ABSOLUTE ? "Absolute" : - ((hdr->addrmap) == H5HF_MAPPED ? "Mapped" : - "Unknown!"))); HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth, - "Min. size of standalone object:", - (unsigned long)hdr->standalone_size); + "Max. size of managed object:", + (unsigned long)hdr->max_man_size); HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Total free space in managed blocks:", hdr->total_man_free); HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, - "Total # of free entries for standalone blocks:", - hdr->total_std_free); - HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, "Total data block size:", hdr->total_size); HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth, diff --git a/src/H5HFhdr.c b/src/H5HFhdr.c index 3628bd8..1f3c79f 100644 --- a/src/H5HFhdr.c +++ b/src/H5HFhdr.c @@ -224,7 +224,7 @@ H5HF_hdr_finish_init(H5HF_hdr_t *hdr) /* Set the size of heap IDs */ hdr->heap_len_size = MIN(hdr->man_dtable.max_dir_blk_off_size, - ((H5V_log2_gen((hsize_t)hdr->standalone_size) + 7) / 8)); + ((H5V_log2_gen((hsize_t)hdr->max_man_size) + 7) / 8)); hdr->id_len = H5HF_ID_SIZE(hdr); /* Set the free space in direct blocks */ @@ -299,7 +299,7 @@ H5HF_hdr_init(H5HF_hdr_t *hdr, haddr_t fh_addr, const H5HF_create_t *cparam) HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, FAIL, "max. direct block size too large") if(!POWER_OF_TWO(cparam->managed.max_direct_size)) HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, FAIL, "max. direct block size not power of two") - if(cparam->managed.max_direct_size < cparam->standalone_size) + if(cparam->managed.max_direct_size < cparam->max_man_size) HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, FAIL, "max. direct block size not large enough to hold all managed blocks") if(cparam->managed.max_index == 0) HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, FAIL, "max. heap size must be greater than zero") @@ -309,8 +309,7 @@ H5HF_hdr_init(H5HF_hdr_t *hdr, haddr_t fh_addr, const H5HF_create_t *cparam) /* Set the creation parameters for the heap */ hdr->heap_addr = fh_addr; - hdr->addrmap = cparam->addrmap; - hdr->standalone_size = cparam->standalone_size; + hdr->max_man_size = cparam->max_man_size; HDmemcpy(&(hdr->man_dtable.cparam), &(cparam->managed), sizeof(H5HF_dtable_cparam_t)); /* Set root table address to indicate that the heap is empty currently */ @@ -319,6 +318,9 @@ H5HF_hdr_init(H5HF_hdr_t *hdr, haddr_t fh_addr, const H5HF_create_t *cparam) /* Set free list header address to indicate that the heap is empty currently */ hdr->fs_addr = HADDR_UNDEF; + /* Set "huge" object tracker B-tree address to indicate that there aren't any yet */ + hdr->huge_bt_addr = HADDR_UNDEF; + /* Note that the shared info is dirty (it's not written to the file yet) */ hdr->dirty = TRUE; @@ -327,9 +329,9 @@ H5HF_hdr_init(H5HF_hdr_t *hdr, haddr_t fh_addr, const H5HF_create_t *cparam) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't create ref-count wrapper for shared fractal heap header") /* Extra checking for possible gap between max. direct block size minus - * overhead and standalone object size */ + * overhead and "huge" object size */ dblock_overhead = H5HF_MAN_ABS_DIRECT_OVERHEAD(hdr); - if((cparam->managed.max_direct_size - dblock_overhead) < cparam->standalone_size) + if((cparam->managed.max_direct_size - dblock_overhead) < cparam->max_man_size) HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, FAIL, "max. direct block size not large enough to hold all managed blocks") done: diff --git a/src/H5HFint.c b/src/H5HFint.c index 9274b4d..ce6d64a 100644 --- a/src/H5HFint.c +++ b/src/H5HFint.c @@ -282,6 +282,7 @@ H5HF_man_insert(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_free_section_t *sec_node, { H5HF_direct_t *dblock = NULL; /* Pointer to direct block to modify */ haddr_t dblock_addr = HADDR_UNDEF; /* Direct block address */ + size_t blk_off; /* Offset of object within block */ herr_t ret_value = SUCCEED; /* Return value */ FUNC_ENTER_NOAPI_NOINIT(H5HF_man_insert) @@ -340,36 +341,30 @@ HDfprintf(stderr, "%s: sec_node->u.single.dblock_size = %Zu\n", FUNC, sec_node-> /* Insert object into block */ - /* Check for address mapping type */ - if(hdr->addrmap == H5HF_ABSOLUTE) { - uint8_t *p; /* Temporary pointer to obj info in block */ - size_t blk_off; /* Offset of object within block */ - - /* Set the offset of the object within the block */ - blk_off = sec_node->sect_info.addr - dblock->block_off; + /* Get the offset of the object within the block */ + blk_off = sec_node->sect_info.addr - dblock->block_off; +#ifdef QAK +HDfprintf(stderr, "%s: blk_off = %Zu\n", FUNC, blk_off); +#endif /* QAK */ - /* Sanity checks */ + /* Sanity checks */ #ifdef QAK HDfprintf(stderr, "%s: hdr->total_man_free = %Hu\n", FUNC, hdr->total_man_free); HDfprintf(stderr, "%s: dblock->block_off = %Hu\n", FUNC, dblock->block_off); #endif /* QAK */ - HDassert(sec_node->sect_info.size >= obj_size); + HDassert(sec_node->sect_info.size >= obj_size); -#ifdef QAK -HDfprintf(stderr, "%s: sec_node->sect_info.size = %Hu\n", FUNC, sec_node->sect_info.size); -#endif /* QAK */ - /* Reduce (& possibly re-add) single section */ - if(H5HF_sect_single_reduce(hdr, dxpl_id, sec_node, obj_size) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTSHRINK, FAIL, "can't reduce single section node") + /* Reduce (& possibly re-add) single section */ + if(H5HF_sect_single_reduce(hdr, dxpl_id, sec_node, obj_size) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTSHRINK, FAIL, "can't reduce single section node") -#ifdef QAK -HDfprintf(stderr, "%s: blk_off = %Zu\n", FUNC, blk_off); -#endif /* QAK */ - /* Reduce space available in heap */ - if(H5HF_hdr_adj_free(hdr, -(ssize_t)obj_size) < 0) - HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, "can't adjust free space for heap") + /* Reduce space available in heap */ + if(H5HF_hdr_adj_free(hdr, -(ssize_t)obj_size) < 0) + HGOTO_ERROR(H5E_HEAP, H5E_CANTDEC, FAIL, "can't adjust free space for heap") - /* Encode the object in the block */ + /* Encode the object in the block */ + { + uint8_t *p; /* Temporary pointer to obj info in block */ /* Point to location for object */ p = dblock->blk + blk_off; @@ -380,19 +375,16 @@ HDfprintf(stderr, "%s: blk_off = %Zu\n", FUNC, blk_off); /* Sanity check */ HDassert((size_t)(p - (dblock->blk + blk_off)) == obj_size); + } /* end block */ - /* Set the heap ID for the new object (heap offset & obj length) */ + /* Set the heap ID for the new object (heap offset & obj length) */ #ifdef QAK HDfprintf(stderr, "%s: dblock->block_off = %Hu\n", FUNC, dblock->block_off); #endif /* QAK */ - H5HF_MAN_ID_ENCODE(id, hdr, (dblock->block_off + blk_off), obj_size); + H5HF_MAN_ID_ENCODE(id, hdr, (dblock->block_off + blk_off), obj_size); #ifdef QAK HDfprintf(stderr, "%s: obj_off = %Hu, obj_len = %Zu\n", FUNC, (dblock->block_off + blk_off), obj_size); #endif /* QAK */ - } /* end if */ - else { -HGOTO_ERROR(H5E_HEAP, H5E_UNSUPPORTED, FAIL, "inserting within mapped managed blocks not supported yet") - } /* end else */ /* Update statistics about heap */ hdr->nobjs++; @@ -544,7 +536,7 @@ HDfprintf(stderr, "%s: obj_off = %Hu, obj_len = %Zu\n", FUNC, obj_off, obj_len); HGOTO_ERROR(H5E_HEAP, H5E_BADRANGE, FAIL, "fractal heap object offset too large") if(obj_len > hdr->man_dtable.cparam.max_direct_size) HGOTO_ERROR(H5E_HEAP, H5E_BADRANGE, FAIL, "fractal heap object size too large for direct block") - if(obj_len > hdr->standalone_size) + if(obj_len > hdr->max_man_size) HGOTO_ERROR(H5E_HEAP, H5E_BADRANGE, FAIL, "fractal heap object should be standalone") /* Check for root direct block */ diff --git a/src/H5HFpkg.h b/src/H5HFpkg.h index b3b0951..25616f8 100644 --- a/src/H5HFpkg.h +++ b/src/H5HFpkg.h @@ -67,23 +67,37 @@ + 2 /* Current # of rows in root indirect block */ \ ) +/* Flags for status byte */ +#define H5HF_HDR_FLAGS_HUGE_ID_WRAPPED 0x01 + /* Size of the fractal heap header on disk */ #define H5HF_HEADER_SIZE(h) ( \ /* General metadata fields */ \ H5HF_METADATA_PREFIX_SIZE \ \ - /* Fractal heap header specific fields */ \ - + 1 /* Address mapping mode */ \ - + 4 /* Min. size of standalone object */ \ + /* Fractal Heap Header specific fields */ \ + \ + /* General heap information */ \ + + 1 /* Status flags */ \ + \ + /* "Huge" object fields */ \ + + 4 /* Max. size of "managed" object */ \ + + (h)->sizeof_size /* Next ID for "huge" object */ \ + + (h)->sizeof_addr /* File address of "huge" object tracker B-tree */ \ + \ + /* "Managed" object free space fields */ \ + (h)->sizeof_size /* Total man. free space */ \ - + (h)->sizeof_size /* Total std. free entries */ \ + (h)->sizeof_addr /* File address of free section header */ \ + \ + /* Statistics fields */ \ + (h)->sizeof_size /* Total size of heap */ \ + (h)->sizeof_size /* Size of man. space in heap */ \ + (h)->sizeof_size /* Size of man. space iterator offset in heap */ \ + (h)->sizeof_size /* Size of alloacted man. space in heap */ \ + (h)->sizeof_size /* Size of std. space in heap */ \ + (h)->sizeof_size /* Number of objects in heap */ \ + \ + /* "Managed" object doubling table info */ \ + H5HF_DTABLE_INFO_SIZE(h) /* Size of managed obj. doubling-table info */ \ ) @@ -279,7 +293,6 @@ typedef struct H5HF_hdr_t { /* Shared internal information (varies during lifetime of heap) */ hsize_t total_man_free; /* Total amount of free space in managed blocks */ - hsize_t total_std_free; /* Total # of free standalone ID entries */ haddr_t fs_addr; /* Address of free space header on disk */ /* Statistics for heap */ @@ -306,9 +319,10 @@ typedef struct H5HF_hdr_t { /* (Partially set by user, partially derived/updated internally) */ H5HF_dtable_t man_dtable; /* Doubling-table info for managed objects */ - /* Information set by user */ - H5HF_addrmap_t addrmap; /* Type of address mapping */ - uint32_t standalone_size; /* Size of object to store standalone */ + /* "Huge" object support (stored in header) */ + uint32_t max_man_size; /* Max. size of object to manage in doubling table */ + hsize_t huge_next_id; /* Next ID to use for "huge" object */ + haddr_t huge_bt_addr; /* Address of B-tree for storing "huge" object info */ /* Information derived from user parameters (not stored in header) */ unsigned char heap_off_size; /* Size of heap offsets (in bytes) */ @@ -316,6 +330,7 @@ typedef struct H5HF_hdr_t { hbool_t debug_objs; /* Is the heap storing objects in 'debug' format */ hbool_t have_io_filter; /* Does the heap have I/O filters for the direct blocks? */ hbool_t write_once; /* Is heap being written in "write once" mode? */ + hbool_t huge_ids_wrapped; /* Have "huge" object IDs wrapped around? */ } H5HF_hdr_t; /* Indirect block entry */ diff --git a/src/H5HFprivate.h b/src/H5HFprivate.h index 4490ec2..32b6f41 100644 --- a/src/H5HFprivate.h +++ b/src/H5HFprivate.h @@ -41,12 +41,6 @@ /* Library Private Typedefs */ /****************************/ -/* Types of heaps */ -typedef enum { - H5HF_ABSOLUTE, /* The heap uses absolute internal addressing */ - H5HF_MAPPED /* The heap maps internal addresses to allow compaction */ -} H5HF_addrmap_t; - /* Creation parameters for doubling-tables */ typedef struct H5HF_dtable_cparam_t { unsigned width; /* Number of columns in the table (must be power of 2) */ @@ -62,9 +56,8 @@ typedef struct H5HF_dtable_cparam_t { /* Fractal heap creation parameters */ typedef struct H5HF_create_t { H5HF_dtable_cparam_t managed;/* Mapped object doubling-table creation parameters */ - H5HF_addrmap_t addrmap; /* Type of address mapping for objects in heap */ - uint32_t standalone_size; /* Size of object to store standalone */ - /* (i.e. max. size of object to manage) */ + uint32_t max_man_size; /* Max. size of object to manage in doubling table */ + /* (i.e. min. size of object to store standalone) */ } H5HF_create_t; /* Fractal heap metadata statistics info */ diff --git a/src/H5HFtest.c b/src/H5HFtest.c index fb25c48..1eeb15e 100644 --- a/src/H5HFtest.c +++ b/src/H5HFtest.c @@ -93,8 +93,7 @@ H5HF_get_cparam_test(const H5HF_t *fh, H5HF_create_t *cparam) HDassert(cparam); /* Get fractal heap creation parameters */ - cparam->addrmap = fh->hdr->addrmap; - cparam->standalone_size = fh->hdr->standalone_size; + cparam->max_man_size = fh->hdr->max_man_size; HDmemcpy(&(cparam->managed), &(fh->hdr->man_dtable.cparam), sizeof(H5HF_dtable_cparam_t)); FUNC_LEAVE_NOAPI(SUCCEED) diff --git a/test/fheap.c b/test/fheap.c index f3ffa9c..a38238a 100644 --- a/test/fheap.c +++ b/test/fheap.c @@ -39,7 +39,6 @@ #define NUM_FILL_OBJS 11 /* "Small" heap creation parameters */ -#define SMALL_ADDRMAP H5HF_ABSOLUTE /* Heap address mapping */ #define SMALL_DBLOCK_OVERHEAD 22 /* Overhead for direct blocks */ #define SMALL_MAN_WIDTH 4 /* Managed obj. table width */ #define SMALL_MAN_START_BLOCK_SIZE 512 /* Managed obj. starting block size */ @@ -158,8 +157,7 @@ init_small_cparam(H5HF_create_t *cparam) HDmemset(cparam, 0, sizeof(H5HF_create_t)); /* General parameters */ - cparam->addrmap = SMALL_ADDRMAP; - cparam->standalone_size = SMALL_STAND_SIZE; + cparam->max_man_size = SMALL_STAND_SIZE; /* Managed object doubling-table parameters */ cparam->managed.width = SMALL_MAN_WIDTH; @@ -10978,8 +10976,8 @@ HDfprintf(stderr, "Random # seed was: %lu\n", seed); total_obj_added = 0; while(total_obj_added < size_limit) { /* Choose a random size of object (from 1 up to stand alone block size) */ - obj_size = (HDrandom() % (cparam->standalone_size - 1)) + 1; - obj_loc = cparam->standalone_size - obj_size; + obj_size = (HDrandom() % (cparam->max_man_size - 1)) + 1; + obj_loc = cparam->max_man_size - obj_size; /* Insert object */ if(add_obj(fh, dxpl, obj_loc, obj_size, NULL, &keep_ids)) @@ -11155,14 +11153,14 @@ HDfprintf(stderr, "Random # seed was: %lu\n", seed); * 25% of the objects will be twice as large, 12.5% will be * four times larger, etc.) */ - while(HDrandom() < (RAND_MAX / 2) && size_range < cparam->standalone_size) + while(HDrandom() < (RAND_MAX / 2) && size_range < cparam->max_man_size) size_range *= 2; - if(size_range > cparam->standalone_size) - size_range = cparam->standalone_size; + if(size_range > cparam->max_man_size) + size_range = cparam->max_man_size; /* Choose a random size of object (from 1 up to stand alone block size) */ obj_size = (HDrandom() % (size_range - 1)) + 1; - obj_loc = cparam->standalone_size - obj_size; + obj_loc = cparam->max_man_size - obj_size; /* Insert object */ if(add_obj(fh, dxpl, obj_loc, obj_size, NULL, &keep_ids)) @@ -11312,7 +11310,7 @@ main(void) init_small_cparam(&cparam); /* Allocate space for the shared objects */ - shared_obj_size_g = cparam.standalone_size + 256; + shared_obj_size_g = cparam.max_man_size + 256; shared_wobj_g = H5MM_malloc(shared_obj_size_g); shared_robj_g = H5MM_malloc(shared_obj_size_g); |