summaryrefslogtreecommitdiffstats
path: root/src/H5HFsection.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2012-08-08 23:01:20 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2012-08-08 23:01:20 (GMT)
commit88a94bbe7ffa3c0bb7779d1b16989b385d9eadd2 (patch)
treebe52b18015cf8df4af976ab5cfdc912748783b22 /src/H5HFsection.c
parent79b2eb993e29cf0382db07b322fa3ca5cb00fc65 (diff)
downloadhdf5-88a94bbe7ffa3c0bb7779d1b16989b385d9eadd2.zip
hdf5-88a94bbe7ffa3c0bb7779d1b16989b385d9eadd2.tar.gz
hdf5-88a94bbe7ffa3c0bb7779d1b16989b385d9eadd2.tar.bz2
[svn-r22646] Description:
Changes resulting from Klocwork static analysis tool, from Mark Miller @ LLNL (miller86@llnl.gov). Tested on: Mac OS X/64 10.7.4 (amazon) w/debug, C++ & FORTRAN, using gcc 4.7.x (too minor to require h5committest)
Diffstat (limited to 'src/H5HFsection.c')
-rw-r--r--src/H5HFsection.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/H5HFsection.c b/src/H5HFsection.c
index e9ea7e0..72ea100 100644
--- a/src/H5HFsection.c
+++ b/src/H5HFsection.c
@@ -2398,7 +2398,10 @@ H5HF_sect_indirect_init_rows(H5HF_hdr_t *hdr, hid_t dxpl_id,
HDassert(sect->u.indirect.span_size > 0);
/* Reset reference count for indirect section */
+ /* (Also reset the direct & indirect row pointers */
sect->u.indirect.rc = 0;
+ sect->u.indirect.dir_rows = NULL;
+ sect->u.indirect.indir_ents = NULL;
/* Set up direct block information, if necessary */
if(start_row < hdr->man_dtable.max_direct_rows) {
@@ -2424,7 +2427,6 @@ H5HF_sect_indirect_init_rows(H5HF_hdr_t *hdr, hid_t dxpl_id,
/* No rows of direct blocks covered, reset direct row information */
dir_nrows = 0;
sect->u.indirect.dir_nrows = 0;
- sect->u.indirect.dir_rows = NULL;
} /* end else */
/* Set up indirect block information, if necessary */
@@ -2459,7 +2461,6 @@ H5HF_sect_indirect_init_rows(H5HF_hdr_t *hdr, hid_t dxpl_id,
else {
/* No indirect block entries covered, reset indirect row information */
sect->u.indirect.indir_nents = 0;
- sect->u.indirect.indir_ents = NULL;
} /* end else */
/* Set up initial row information */
@@ -2598,6 +2599,13 @@ H5HF_sect_indirect_init_rows(H5HF_hdr_t *hdr, hid_t dxpl_id,
(sect->u.indirect.indir_nents + sect->u.indirect.dir_nrows));
done:
+ if(ret_value < 0) {
+ if(sect->u.indirect.indir_ents)
+ H5MM_xfree(sect->u.indirect.indir_ents);
+ if(sect->u.indirect.dir_rows)
+ H5MM_xfree(sect->u.indirect.dir_rows);
+ } /* end if */
+
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5HF_sect_indirect_init_rows() */