summaryrefslogtreecommitdiffstats
path: root/src/H5HLcache.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2010-02-15 03:23:19 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2010-02-15 03:23:19 (GMT)
commitc5c0afaa613115284c4d564a574a13b97027c1ab (patch)
tree98561ce374f7bd333ede4dc721c291fc2b597ea4 /src/H5HLcache.c
parent824d691cbf1a04e3207218e86246645b5609079e (diff)
downloadhdf5-c5c0afaa613115284c4d564a574a13b97027c1ab.zip
hdf5-c5c0afaa613115284c4d564a574a13b97027c1ab.tar.gz
hdf5-c5c0afaa613115284c4d564a574a13b97027c1ab.tar.bz2
[svn-r18256] Description:
Bring changes from Coverity fixing branch to trunk: r18235: Fixed coverity 114: if (NULL ==_dest) H5MM_free(dest); r18236: Close Coverity issue #28 (again :-) by working through the logic of the routine more thoroughly to eliminate the goto statements. (LK & QK) r18237: fixed coverity 133: if (NULL==_dest && NULL==ret_value && NULL != dest) H5MM_free(dest); r18238: Fix coverity items 421 and 422. Added assertion that the heap's free list is NULL when entering H5HL_fl_deserialize, guarateeing that the free list will always be linked in even on failure. r18239: Fix coverity item 268. Changed H5MM_xfree(read_buf) to read_buf = H5MM_xfree(read_buf) so that read_buf isn't manipulated after it's been freed. r18241: coverity fix: use correct free functon H5FL_FREE()from the previous fix r18242: Coverity fix 139: Free dst correctly in H5O_sdspace_copy(). r18243: Fix Coverity issue #417 by checking for NULL return value from setup_cache() (LK & QK) r18244: Coverity Fix 132: free dest correctly in H5O_efl_copy() r18245: Issue 121: H5S_hyper_make_spans() cannot deal with counts of 0. However, H5Sselect_hyperslab() API does allow a count of 0. Therefore, simply throw an error if this function encounters a count of 0. r18246: Check file_ptr to address coverity issue # 418 r18247: Fixed coverity 113: if (sequence) H5MM_xfree(sequence); r18248: Coverity issue #414 by checking for NULL return from setup_cache() (LK & QK) r18249: fixed coverity 274: moved H5FL_FREE(H5A_t, attr); to a line above so that if attr is null, it will not free it. r18250: Fix coverity issue #86. Check return of malloc function to ensure non-null before continuing. Tested on: Mac OS X/32 10.6.2 (amazon) w/debug & production) (h5committested in daily tests on branch)
Diffstat (limited to 'src/H5HLcache.c')
-rw-r--r--src/H5HLcache.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/H5HLcache.c b/src/H5HLcache.c
index 6e725ac..6064fe5 100644
--- a/src/H5HLcache.c
+++ b/src/H5HLcache.c
@@ -138,13 +138,14 @@ const H5AC_class_t H5AC_LHEAP_DBLK[1] = {{
static herr_t
H5HL_fl_deserialize(H5HL_t *heap, hsize_t free_block)
{
- H5HL_free_t *fl, *tail = NULL; /* Heap free block nodes */
+ H5HL_free_t *fl = NULL, *tail = NULL; /* Heap free block nodes */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_NOAPI_NOINIT(H5HL_fl_deserialize)
/* check arguments */
HDassert(heap);
+ HDassert(!heap->freelist);
/* Build free list */
while(H5HL_FREE_NULL != free_block) {
@@ -161,13 +162,6 @@ H5HL_fl_deserialize(H5HL_t *heap, hsize_t free_block)
fl->prev = tail;
fl->next = NULL;
- /* Insert node into list */
- if(tail)
- tail->next = fl;
- tail = fl;
- if(!heap->freelist)
- heap->freelist = fl;
-
/* Decode offset of next free block */
p = heap->dblk_image + free_block;
H5F_DECODE_LENGTH_LEN(p, free_block, heap->sizeof_size);
@@ -178,9 +172,21 @@ H5HL_fl_deserialize(H5HL_t *heap, hsize_t free_block)
H5F_DECODE_LENGTH_LEN(p, fl->size, heap->sizeof_size);
if(fl->offset + fl->size > heap->dblk_size)
HGOTO_ERROR(H5E_HEAP, H5E_BADRANGE, FAIL, "bad heap free list")
+
+ /* Insert node into list */
+ if(tail)
+ tail->next = fl;
+ tail = fl;
+ if(!heap->freelist)
+ heap->freelist = fl;
+ fl = NULL;
} /* end while */
done:
+ if(ret_value < 0)
+ if(fl)
+ fl = H5FL_FREE(H5HL_free_t, fl);
+
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5HL_fl_deserialize() */