summaryrefslogtreecommitdiffstats
path: root/src/H5Shyper.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@koziol.gov>2019-06-17 23:19:05 (GMT)
committerQuincey Koziol <koziol@koziol.gov>2019-06-17 23:19:05 (GMT)
commit49f14964c373f1206339ab26c684ab4e8b175da6 (patch)
tree28b18981997c64933d8be5a25156f5a37a9f8b35 /src/H5Shyper.c
parent73331f73dd334f8a0a29eba9ac0025ff31251118 (diff)
downloadhdf5-49f14964c373f1206339ab26c684ab4e8b175da6.zip
hdf5-49f14964c373f1206339ab26c684ab4e8b175da6.tar.gz
hdf5-49f14964c373f1206339ab26c684ab4e8b175da6.tar.bz2
Add H5S_SEL_ITER_SHARE_WITH_DATASPACE selection iterator creation flag, to
share dataspace's selection with iterator (and with caution about not modifying or closing the dataspace while the iterator is open).
Diffstat (limited to 'src/H5Shyper.c')
-rw-r--r--src/H5Shyper.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/H5Shyper.c b/src/H5Shyper.c
index 49d7cb3..6df368d 100644
--- a/src/H5Shyper.c
+++ b/src/H5Shyper.c
@@ -726,10 +726,17 @@ H5S__hyper_iter_init(const H5S_t *space, H5S_sel_iter_t *iter)
else { /* Initialize the information needed for non-regular hyperslab I/O */
H5S_hyper_span_info_t *spans; /* Pointer to hyperslab span info node */
- /* If this iterator is created from an API call, we must clone the
+ /* If this iterator is created from an API call, by default we clone the
* selection now, as the dataspace could be modified or go out of scope.
+ *
+ * However, if the H5S_SEL_ITER_SHARE_WITH_DATASPACE flag is given,
+ * the selection is shared between the selection iterator and the
+ * dataspace. In this case, the application _must_not_ modify or
+ * close the dataspace that the iterator is operating on, or undefined
+ * behavior will occur.
*/
- if(iter->flags & H5S_SEL_ITER_API_CALL) {
+ if((iter->flags & H5S_SEL_ITER_API_CALL) &&
+ !(iter->flags & H5S_SEL_ITER_SHARE_WITH_DATASPACE)) {
/* Copy the span tree */
if(NULL == (iter->u.hyp.spans = H5S__hyper_copy_span(space->select.sel_info.hslab->span_lst, space->extent.rank)))
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, FAIL, "can't copy span tree")