summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVailin Choi <vchoi@hdfgroup.org>2015-06-12 22:55:18 (GMT)
committerVailin Choi <vchoi@hdfgroup.org>2015-06-12 22:55:18 (GMT)
commite29904660a01b137e8470a8fe71d2d73a3f76538 (patch)
treeead1d6c90cc3dac1cc5d6979c6963dbb94b0a703
parentd92c74b4aa169d33c72ea273dd401ac8586ca56f (diff)
downloadhdf5-e29904660a01b137e8470a8fe71d2d73a3f76538.zip
hdf5-e29904660a01b137e8470a8fe71d2d73a3f76538.tar.gz
hdf5-e29904660a01b137e8470a8fe71d2d73a3f76538.tar.bz2
[svn-r27198] Set "entire_chunk" to false in H5D__chunk_write() for point selection as duplicate points are not checked to determine
that it is really an "entire chunk". The bug appears from running the mdset.c test. This is a short-term fix for the problem.
-rw-r--r--src/H5Dchunk.c8
-rw-r--r--src/H5Dpkg.h1
2 files changed, 5 insertions, 4 deletions
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index e22eb3a..af5123c 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -722,7 +722,6 @@ H5D__chunk_io_init(const H5D_io_info_t *io_info, const H5D_type_info_t *type_inf
unsigned f_ndims; /* The number of dimensions of the file's dataspace */
int sm_ndims; /* The number of dimensions of the memory buffer's dataspace (signed) */
H5SL_node_t *curr_node; /* Current node in skip list */
- H5S_sel_type fsel_type; /* Selection type on disk */
char bogus; /* "bogus" buffer to pass to selection iterator */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
@@ -836,13 +835,13 @@ H5D__chunk_io_init(const H5D_io_info_t *io_info, const H5D_type_info_t *type_inf
fm->use_single = FALSE;
/* Get type of selection on disk & in memory */
- if((fsel_type = H5S_GET_SELECT_TYPE(file_space)) < H5S_SEL_NONE)
+ if((fm->fsel_type = H5S_GET_SELECT_TYPE(file_space)) < H5S_SEL_NONE)
HGOTO_ERROR(H5E_DATASET, H5E_BADSELECT, FAIL, "unable to get type of selection")
if((fm->msel_type = H5S_GET_SELECT_TYPE(mem_space)) < H5S_SEL_NONE)
HGOTO_ERROR(H5E_DATASET, H5E_BADSELECT, FAIL, "unable to get type of selection")
/* If the selection is NONE or POINTS, set the flag to FALSE */
- if(fsel_type == H5S_SEL_POINTS || fsel_type == H5S_SEL_NONE)
+ if(fm->fsel_type == H5S_SEL_POINTS || fm->fsel_type == H5S_SEL_NONE)
sel_hyper_flag = FALSE;
else
sel_hyper_flag = TRUE;
@@ -2014,7 +2013,8 @@ H5D__chunk_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
/* Determine if we will access all the data in the chunk */
if(dst_accessed_bytes != ctg_store.contig.dset_size ||
- (chunk_info->chunk_points * type_info->src_type_size) != ctg_store.contig.dset_size)
+ (chunk_info->chunk_points * type_info->src_type_size) != ctg_store.contig.dset_size ||
+ fm->fsel_type == H5S_SEL_POINTS)
entire_chunk = FALSE;
/* Set chunk's [scaled] coordinates */
diff --git a/src/H5Dpkg.h b/src/H5Dpkg.h
index 815dae4..1476229 100644
--- a/src/H5Dpkg.h
+++ b/src/H5Dpkg.h
@@ -337,6 +337,7 @@ typedef struct H5D_chunk_map_t {
H5S_sel_iter_t mem_iter; /* Iterator for elements in memory selection */
unsigned m_ndims; /* Number of dimensions for memory dataspace */
H5S_sel_type msel_type; /* Selection type in memory */
+ H5S_sel_type fsel_type; /* Selection type in file */
H5SL_t *sel_chunks; /* Skip list containing information for each chunk selected */