summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNeil Fortner <nfortne2@hdfgroup.org>2015-02-09 16:31:28 (GMT)
committerNeil Fortner <nfortne2@hdfgroup.org>2015-02-09 16:31:28 (GMT)
commit1b784081847f83b99807021a73673e591f27272f (patch)
tree71ef6241495470a0e0470c573ea24c172ada527c /src
parentf4a60fc34c91fbb866a5be8a3fb864bf9165f30c (diff)
downloadhdf5-1b784081847f83b99807021a73673e591f27272f.zip
hdf5-1b784081847f83b99807021a73673e591f27272f.tar.gz
hdf5-1b784081847f83b99807021a73673e591f27272f.tar.bz2
[svn-r26149] Fix potential memory error reported by valgrind in
H5D__link_chunk_collective_io. This would occur when performing collective I/O on a dataset with only 1 chunk, and a participating process had nothing to read or write. Tested: jam, koala, ostrich (h5committest)
Diffstat (limited to 'src')
-rw-r--r--src/H5Dmpio.c44
1 files changed, 21 insertions, 23 deletions
diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c
index 58bcc04..01d2288 100644
--- a/src/H5Dmpio.c
+++ b/src/H5Dmpio.c
@@ -833,39 +833,37 @@ H5D__link_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *typ
* equivalent of compressed contiguous datasets - QAK]
*/
if(total_chunks == 1) {
- H5D_chunk_ud_t udata; /* User data for querying chunk info */
- hsize_t coords[H5O_LAYOUT_NDIMS]; /* Coordinates of chunk in file dataset's dataspace */
H5SL_node_t *chunk_node; /* Pointer to chunk node for selection */
H5S_t *fspace; /* Dataspace describing chunk & selection in it */
H5S_t *mspace; /* Dataspace describing selection in memory corresponding to this chunk */
- /* Initialize the chunk coordinates */
- /* (must be all zero, since there's only one chunk) */
- HDmemset(coords, 0, sizeof(coords));
-
- /* Look up address of chunk */
- if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, coords,
- io_info->store->chunk.index, &udata) < 0)
- HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk info from skipped list")
- ctg_store.contig.dset_addr = udata.addr;
-
/* Check for this process having selection in this chunk */
chunk_node = H5SL_first(fm->sel_chunks);
if(chunk_node == NULL) {
- /* Set the dataspace info for I/O to NULL, this process doesn't have any I/O to perform */
- fspace = mspace = NULL;
+ /* Set the dataspace info for I/O to NULL, this process doesn't have any I/O to perform */
+ fspace = mspace = NULL;
+
+ /* Initialize chunk address */
+ ctg_store.contig.dset_addr = 0;
} /* end if */
else {
- H5D_chunk_info_t *chunk_info;
-
- /* Get the chunk info, for the selection in the chunk */
- if(NULL == (chunk_info = H5SL_item(chunk_node)))
- HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk info from skipped list")
-
- /* Set the dataspace info for I/O */
- fspace = chunk_info->fspace;
- mspace = chunk_info->mspace;
+ H5D_chunk_ud_t udata; /* User data for querying chunk info */
+ H5D_chunk_info_t *chunk_info; /* Info for chunk in skiplist */
+
+ /* Get the chunk info, for the selection in the chunk */
+ if(NULL == (chunk_info = (H5D_chunk_info_t *)H5SL_item(chunk_node)))
+ HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk info from skip list")
+
+ /* Set the dataspace info for I/O */
+ fspace = chunk_info->fspace;
+ mspace = chunk_info->mspace;
+
+ /* Look up address of chunk */
+ if(H5D__chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->coords,
+ chunk_info->index, &udata) < 0)
+ HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk address")
+ ctg_store.contig.dset_addr = udata.addr;
} /* end else */
/* Set up the base storage address for this chunk */