summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2004-07-26 04:41:48 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2004-07-26 04:41:48 (GMT)
commit7a07c6cc133e62f5f00e6a4baf214c9011657800 (patch)
tree8f3407f18b78c8b0283f0663fd0ba0a4ee608212 /src
parent6543e55efad7ded7f5a0e0dc50786c966aea6b98 (diff)
downloadhdf5-7a07c6cc133e62f5f00e6a4baf214c9011657800.zip
hdf5-7a07c6cc133e62f5f00e6a4baf214c9011657800.tar.gz
hdf5-7a07c6cc133e62f5f00e6a4baf214c9011657800.tar.bz2
[svn-r8946] Purpose:
Code cleanup, sorta Description: Added ifdef sections for "H5_USING_PURIFY" in various places in the code, which are designed to reduce the spurious "uninitialized memory read" warnings from purify which are actually OK. Note that this macro will have to be turned on by adding it to the CFLAGS for the build - I didn't think it was important enough to add a configure flag for. Also, the changes in H5HG.c optimize the walks through the objects in a heap to only look at the 'used' entries instead of all the 'allocated' entries. Platforms tested: Solaris 2.7 (arabica) w/purify Not tested by h5committest
Diffstat (limited to 'src')
-rw-r--r--src/H5Distore.c7
-rw-r--r--src/H5FD.c15
-rw-r--r--src/H5FLprivate.h4
-rw-r--r--src/H5Gnode.c3
-rw-r--r--src/H5HG.c35
-rw-r--r--src/H5HGdbg.c4
-rw-r--r--src/H5HGpkg.h2
7 files changed, 50 insertions, 20 deletions
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 */
}
diff --git a/src/H5FD.c b/src/H5FD.c
index a5bbd9d..af58337 100644
--- a/src/H5FD.c
+++ b/src/H5FD.c
@@ -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")
diff --git a/src/H5HG.c b/src/H5HG.c
index 6ccc0fe..252af88 100644
--- a/src/H5HG.c
+++ b/src/H5HG.c
@@ -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 */