diff options
-rw-r--r-- | release_docs/RELEASE.txt | 31 | ||||
-rw-r--r-- | src/H5Distore.c | 7 | ||||
-rw-r--r-- | src/H5FD.c | 15 | ||||
-rw-r--r-- | src/H5FLprivate.h | 4 | ||||
-rw-r--r-- | src/H5Gnode.c | 3 | ||||
-rw-r--r-- | src/H5HG.c | 35 | ||||
-rw-r--r-- | src/H5HGdbg.c | 4 | ||||
-rw-r--r-- | src/H5HGpkg.h | 2 |
8 files changed, 68 insertions, 33 deletions
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index 00b7050..89bd875 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -36,30 +36,35 @@ New Features Configuration: -------------- + - Added some initial support for making purify (or similar memory + checking products) happier by initializing buffers to zero and + disabling the internal free list code. To take advantage of this, + define 'H5_USING_PURIFY' in your CFLAGS when building the library. + QAK - 2004/07/23 - Fixed the long compile time of H5detect.c when v7.x Intel Compiler - is used with optimization NOT off. AKC - 2004/05/20 + is used with optimization NOT off. AKC - 2004/05/20 - Fixed configure setting of C++ for OSF1 platform. AKC - 2004/01/06 - Prefix default is changed from /usr/local to `pwd`/hdf5. - AKC - 2003/07/09 + AKC - 2003/07/09 Library: -------- - 4 new API functions, H5Tencode, H5Tdecode, H5Sencode, H5Sdecode were - added to the library. Given object ID, these functions encode and - decode HDF5 objects(data type and space) information into and from - binary buffer. SLU - 2004/07/21 + added to the library. Given object ID, these functions encode and + decode HDF5 objects(data type and space) information into and from + binary buffer. SLU - 2004/07/21 - Modified the way how HDF5 calculates 'pixels_per_scanline' parameter for - SZIP compression. Now there is no restriction on the size and shape of the - chunk except that the total number of elements in the chunk cannot be - bigger than 'pixels_per_block' parameter provided by the user. + SZIP compression. Now there is no restriction on the size and shape of the + chunk except that the total number of elements in the chunk cannot be + bigger than 'pixels_per_block' parameter provided by the user. EIP - 2004/07/21 - Added support for SZIP without encoder. Added H5Zget_filter_info - and changed H5Pget_filter and H5Pget_filter_by_id to support this - change. JL/NF - 2004/06/30 + and changed H5Pget_filter and H5Pget_filter_by_id to support this + change. JL/NF - 2004/06/30 - SZIP always uses K13 compression. This flag no longer needs to - be set when calling H5Pset_szip. If the flag for CHIP - compression is set, it will be ignored (since the two are mutually - exclusive). JL/NF - 2004/6/30 + be set when calling H5Pset_szip. If the flag for CHIP + compression is set, it will be ignored (since the two are mutually + exclusive). JL/NF - 2004/6/30 - A new API function H5Fget_name was added. It returns the name of the file by object(file, group, data set, named data type, attribute) ID. SLU - 2004/06/29 diff --git a/src/H5Distore.c b/src/H5Distore.c index da9776a..596350b 100644 --- a/src/H5Distore.c +++ b/src/H5Distore.c @@ -960,6 +960,9 @@ H5D_istore_init (H5F_t *f, H5D_t *dset) assert(shared->sizeof_rnode); if(NULL==(shared->page=H5FL_BLK_MALLOC(chunk_page,shared->sizeof_rnode))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree page") +#ifdef H5_USING_PURIFY +HDmemset(shared->page,0,shared->sizeof_rnode); +#endif /* H5_USING_PURIFY */ if(NULL==(shared->nkey=H5FL_SEQ_MALLOC(size_t,(size_t)(2*H5F_KVALUE(f,H5B_ISTORE)+1)))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree page") @@ -1597,6 +1600,10 @@ H5D_istore_lock(H5F_t *f, const H5D_dxpl_cache_t *dxpl_cache, hid_t dxpl_id, HDmemset (chunk, 0, chunk_size); } /* end else */ } /* end if */ +#ifdef H5_USING_PURIFY +else + HDmemset(ret_value,0,size); +#endif /* H5_USING_PURIFY */ rdcc->ninits++; } /* end else */ } @@ -3357,6 +3357,9 @@ H5FD_write(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t si /* Reallocate the metadata accumulator buffer */ if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,file->accum_buf_size))==NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer") +#ifdef H5_USING_PURIFY +HDmemset(file->meta_accum+file->accum_size,0,(file->accum_buf_size-file->accum_size)); +#endif /* H5_USING_PURIFY */ } /* end if */ /* Move the existing metadata to the proper location */ @@ -3382,6 +3385,9 @@ H5FD_write(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t si /* Reallocate the metadata accumulator buffer */ if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,file->accum_buf_size))==NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer") +#ifdef H5_USING_PURIFY +HDmemset(file->meta_accum+file->accum_size,0,(file->accum_buf_size-file->accum_size)); +#endif /* H5_USING_PURIFY */ } /* end if */ /* Copy the new metadata to the end */ @@ -3414,6 +3420,9 @@ H5FD_write(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t si /* Reallocate the metadata accumulator buffer */ if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,file->accum_buf_size))==NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer") +#ifdef H5_USING_PURIFY +HDmemset(file->meta_accum+file->accum_size,0,(file->accum_buf_size-file->accum_size)); +#endif /* H5_USING_PURIFY */ } /* end if */ /* Calculate the proper offset of the existing metadata */ @@ -3445,6 +3454,9 @@ H5FD_write(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t si /* Reallocate the metadata accumulator buffer */ if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,file->accum_buf_size))==NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer") +#ifdef H5_USING_PURIFY +HDmemset(file->meta_accum+file->accum_size,0,(file->accum_buf_size-file->accum_size)); +#endif /* H5_USING_PURIFY */ } /* end if */ /* Copy the new metadata to the end */ @@ -3479,6 +3491,9 @@ H5FD_write(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t si /* Note the new buffer size */ file->accum_buf_size=size; +#ifdef H5_USING_PURIFY +HDmemset(file->meta_accum+file->accum_size,0,(file->accum_buf_size-file->accum_size)); +#endif /* H5_USING_PURIFY */ } /* end if */ else { /* Check if we should shrink the accumulator buffer */ diff --git a/src/H5FLprivate.h b/src/H5FLprivate.h index efcee82..641a630 100644 --- a/src/H5FLprivate.h +++ b/src/H5FLprivate.h @@ -35,8 +35,8 @@ /* Private headers needed by this file */ /* Macros for turning off free lists in the library */ -/*#define H5_NO_FREE_LISTS*/ -#ifdef H5_NO_FREE_LISTS +/* #define H5_NO_FREE_LISTS */ +#if defined H5_NO_FREE_LISTS || defined H5_USING_PURIFY #define H5_NO_REG_FREE_LISTS #define H5_NO_ARR_FREE_LISTS #define H5_NO_SEQ_FREE_LISTS diff --git a/src/H5Gnode.c b/src/H5Gnode.c index 6743c7e..52194cc 100644 --- a/src/H5Gnode.c +++ b/src/H5Gnode.c @@ -1752,6 +1752,9 @@ H5G_node_init(H5F_t *f) assert(shared->sizeof_rnode); if(NULL==(shared->page=H5FL_BLK_MALLOC(grp_page,shared->sizeof_rnode))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree page") +#ifdef H5_USING_PURIFY +HDmemset(shared->page,0,shared->sizeof_rnode); +#endif /* H5_USING_PURIFY */ if(NULL==(shared->nkey=H5FL_SEQ_MALLOC(size_t,(size_t)(2*H5F_KVALUE(f,H5B_SNODE)+1)))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree page") @@ -218,8 +218,11 @@ H5HG_create (H5F_t *f, hid_t dxpl_id, size_t size) if (NULL==(heap->chunk = H5FL_BLK_MALLOC (heap_chunk,size))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, \ "memory allocation failed"); +#ifdef H5_USING_PURIFY +HDmemset(heap->chunk,0,size); +#endif /* H5_USING_PURIFY */ heap->nalloc = H5HG_NOBJS (f, size); - heap->next_idx = 1; /* skip index 0, which is used for the free object */ + heap->nused = 1; /* account for index 0, which is used for the free object */ if (NULL==(heap->obj = H5FL_SEQ_MALLOC (H5HG_obj_t,heap->nalloc))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, \ "memory allocation failed"); @@ -444,9 +447,9 @@ H5HG_load (H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * udata1, /* Set the next index value to use */ if(max_idx>0) - heap->next_idx=max_idx+1; + heap->nused=max_idx+1; else - heap->next_idx=1; + heap->nused=1; /* * Add the new heap to the CWFS list, removing some other entry if @@ -682,11 +685,10 @@ H5HG_alloc (H5F_t *f, H5HG_heap_t *heap, size_t size) * Find an ID for the new object. ID zero is reserved for the free space * object. */ - if(heap->next_idx<H5HG_MAXIDX) { - idx=heap->next_idx++; - } /* end if */ + if(heap->nused<H5HG_MAXIDX) + idx=heap->nused++; else { - for (idx=1; idx<heap->nalloc; idx++) + for (idx=1; idx<heap->nused; idx++) if (NULL==heap->obj[idx].begin) break; } /* end else */ @@ -707,7 +709,7 @@ H5HG_alloc (H5F_t *f, H5HG_heap_t *heap, size_t size) /* Update heap information */ heap->nalloc=new_alloc; heap->obj=new_obj; - assert(heap->nalloc>heap->next_idx); + assert(heap->nalloc>heap->nused); } /* end if */ /* Initialize the new object */ @@ -815,6 +817,9 @@ H5HG_extend (H5F_t *f, H5HG_heap_t *heap, size_t size) /* Re-allocate the heap information in memory */ if (NULL==(new_chunk = H5FL_BLK_REALLOC (heap_chunk, heap->chunk, heap->size+need))) HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "new heap allocation failed"); +#ifdef H5_USING_PURIFY +HDmemset(new_chunk+heap->size,0,need); +#endif /* H5_USING_PURIFY */ /* Adjust the size of the heap */ old_size=heap->size; @@ -825,7 +830,7 @@ H5HG_extend (H5F_t *f, H5HG_heap_t *heap, size_t size) H5F_ENCODE_LENGTH (f, p, heap->size); /* Move the pointers to the existing objects to their new locations */ - for (u=0; u<heap->nalloc; u++) + for (u=0; u<heap->nused; u++) if(heap->obj[u].begin) heap->obj[u].begin = new_chunk + (heap->obj[u].begin - heap->chunk); @@ -1081,7 +1086,7 @@ H5HG_peek (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj) if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL, H5AC_READ))) HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL, "unable to load heap"); - assert (hobj->idx>0 && hobj->idx<heap->nalloc); + assert (hobj->idx>0 && hobj->idx<heap->nused); ret_value = heap->obj[hobj->idx].begin + H5HG_SIZEOF_OBJHDR (f); assert (ret_value); @@ -1148,7 +1153,7 @@ H5HG_read (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, void *object/*out*/) if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL, H5AC_READ))) HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL, "unable to load heap"); - assert (hobj->idx>0 && hobj->idx<heap->nalloc); + assert (hobj->idx>0 && hobj->idx<heap->nused); assert (heap->obj[hobj->idx].begin); size = heap->obj[hobj->idx].size; p = heap->obj[hobj->idx].begin + H5HG_SIZEOF_OBJHDR (f); @@ -1222,7 +1227,7 @@ H5HG_link (H5F_t *f, hid_t dxpl_id, const H5HG_t *hobj, int adjust) if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL, H5AC_WRITE))) HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap"); - assert (hobj->idx>0 && hobj->idx<heap->nalloc); + assert (hobj->idx>0 && hobj->idx<heap->nused); assert (heap->obj[hobj->idx].begin); if (heap->obj[hobj->idx].nrefs+adjust<0) HGOTO_ERROR (H5E_HEAP, H5E_BADRANGE, FAIL, "new link count would be out of range"); @@ -1280,14 +1285,14 @@ H5HG_remove (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj) if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL, H5AC_WRITE))) HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap"); - assert (hobj->idx>0 && hobj->idx<heap->nalloc); + assert (hobj->idx>0 && hobj->idx<heap->nused); assert (heap->obj[hobj->idx].begin); obj_start = heap->obj[hobj->idx].begin; /* Include object header size */ need = H5HG_ALIGN(heap->obj[hobj->idx].size)+H5HG_SIZEOF_OBJHDR(f); /* Move the new free space to the end of the heap */ - for (u=0; u<heap->nalloc; u++) { + for (u=0; u<heap->nused; u++) { if (heap->obj[u].begin > heap->obj[hobj->idx].begin) heap->obj[u].begin -= need; } @@ -1331,7 +1336,7 @@ H5HG_remove (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj) f->shared->cwfs[i] = f->shared->cwfs[i-1]; f->shared->cwfs[i-1] = heap; } - break; + break; } } if (i>=f->shared->ncwfs) { diff --git a/src/H5HGdbg.c b/src/H5HGdbg.c index dccdc54..68a3e85 100644 --- a/src/H5HGdbg.c +++ b/src/H5HGdbg.c @@ -80,7 +80,7 @@ H5HG_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, "Total collection size in file:", (unsigned long)(h->size)); - for (u=1, nused=0, maxobj=0; u<h->nalloc; u++) { + for (u=1, nused=0, maxobj=0; u<h->nused; u++) { if (h->obj[u].begin) { nused++; if (u>maxobj) maxobj = u; @@ -95,7 +95,7 @@ H5HG_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, "Free space:", (unsigned long)(h->obj[0].size)); - for (u=1; u<h->nalloc; u++) { + for (u=1; u<h->nused; u++) { if (h->obj[u].begin) { sprintf (buf, "Object %u", u); fprintf (stream, "%*s%s\n", indent, "", buf); diff --git a/src/H5HGpkg.h b/src/H5HGpkg.h index 8eb56e6..de5bb77 100644 --- a/src/H5HGpkg.h +++ b/src/H5HGpkg.h @@ -81,7 +81,7 @@ struct H5HG_heap_t { size_t size; /*total size of collection */ uint8_t *chunk; /*the collection, incl. header */ size_t nalloc; /*numb object slots allocated */ - size_t next_idx; /* Object index to use next */ + size_t nused; /*number of slots used */ /* If this value is >65535 then all indices */ /* have been used at some time and the */ /* correct new index should be searched for */ |