summaryrefslogtreecommitdiffstats
path: root/src/H5CX.c
diff options
context:
space:
mode:
authorDana Robinson <derobins@hdfgroup.org>2021-04-08 00:35:30 (GMT)
committerDana Robinson <derobins@hdfgroup.org>2021-04-08 00:35:30 (GMT)
commitce39d7501c58427add05aba62956acb84a6f56da (patch)
tree02f3845f417bd80bc1c6469e78ef3981babec648 /src/H5CX.c
parent2f4152d02dbe55c158fa0ceb91ce8fb1a5a47bd3 (diff)
downloadhdf5-ce39d7501c58427add05aba62956acb84a6f56da.zip
hdf5-ce39d7501c58427add05aba62956acb84a6f56da.tar.gz
hdf5-ce39d7501c58427add05aba62956acb84a6f56da.tar.bz2
Brings H5CX_pop() changes from develop
Diffstat (limited to 'src/H5CX.c')
-rw-r--r--src/H5CX.c40
1 files changed, 23 insertions, 17 deletions
diff --git a/src/H5CX.c b/src/H5CX.c
index f3a5eef..cff06f6 100644
--- a/src/H5CX.c
+++ b/src/H5CX.c
@@ -422,7 +422,7 @@ typedef struct H5CX_fapl_cache_t {
static H5CX_node_t **H5CX__get_context(void);
#endif /* H5_HAVE_THREADSAFE */
static void H5CX__push_common(H5CX_node_t *cnode);
-static H5CX_node_t *H5CX__pop_common(void);
+static H5CX_node_t *H5CX__pop_common(hbool_t update_dxpl_props);
/*********************/
/* Package Variables */
@@ -678,7 +678,7 @@ H5CX_term_package(void)
/* Pop the top context node from the stack */
/* (Can't check for errors, as rest of library is shut down) */
- cnode = H5CX__pop_common();
+ cnode = H5CX__pop_common(FALSE);
/* Free the context node */
/* (Allocated with HDmalloc() in H5CX_push_special() ) */
@@ -932,9 +932,11 @@ H5CX_retrieve_state(H5CX_state_t **api_state)
/* Keep a reference to the current VOL wrapping context */
(*api_state)->vol_wrap_ctx = (*head)->ctx.vol_wrap_ctx;
- if (NULL != (*api_state)->vol_wrap_ctx)
+ if (NULL != (*api_state)->vol_wrap_ctx) {
+ HDassert((*head)->ctx.vol_wrap_ctx_valid);
if (H5VL_inc_vol_wrapper((*api_state)->vol_wrap_ctx) < 0)
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTINC, FAIL, "can't increment refcount on VOL wrapping context")
+ } /* end if */
/* Keep a copy of the VOL connector property, if there is one */
if ((*head)->ctx.vol_connector_prop_valid && (*head)->ctx.vol_connector_prop.connector_id > 0) {
@@ -1023,6 +1025,8 @@ H5CX_restore_state(const H5CX_state_t *api_state)
/* Restore the VOL wrapper context */
(*head)->ctx.vol_wrap_ctx = api_state->vol_wrap_ctx;
+ if (NULL != (*head)->ctx.vol_wrap_ctx)
+ (*head)->ctx.vol_wrap_ctx_valid = TRUE;
/* Restore the VOL connector info */
if (api_state->vol_connector_prop.connector_id) {
@@ -3559,7 +3563,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5CX_node_t *
-H5CX__pop_common(void)
+H5CX__pop_common(hbool_t update_dxpl_props)
{
H5CX_node_t **head =
H5CX_get_my_context(); /* Get the pointer to the head of the API context, for this thread */
@@ -3575,21 +3579,23 @@ H5CX__pop_common(void)
HDassert(head && *head);
/* Check for cached DXPL properties to return to application */
+ if (update_dxpl_props) {
#ifdef H5_HAVE_PARALLEL
- H5CX_SET_PROP(H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, mpio_actual_chunk_opt)
- H5CX_SET_PROP(H5D_MPIO_ACTUAL_IO_MODE_NAME, mpio_actual_io_mode)
- H5CX_SET_PROP(H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME, mpio_local_no_coll_cause)
- H5CX_SET_PROP(H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME, mpio_global_no_coll_cause)
+ H5CX_SET_PROP(H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, mpio_actual_chunk_opt)
+ H5CX_SET_PROP(H5D_MPIO_ACTUAL_IO_MODE_NAME, mpio_actual_io_mode)
+ H5CX_SET_PROP(H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME, mpio_local_no_coll_cause)
+ H5CX_SET_PROP(H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME, mpio_global_no_coll_cause)
#ifdef H5_HAVE_INSTRUMENTED_LIBRARY
- H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_LINK_HARD_NAME, mpio_coll_chunk_link_hard)
- H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_MULTI_HARD_NAME, mpio_coll_chunk_multi_hard)
- H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_LINK_NUM_TRUE_NAME, mpio_coll_chunk_link_num_true)
- H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_LINK_NUM_FALSE_NAME, mpio_coll_chunk_link_num_false)
- H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_MULTI_RATIO_COLL_NAME, mpio_coll_chunk_multi_ratio_coll)
- H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_MULTI_RATIO_IND_NAME, mpio_coll_chunk_multi_ratio_ind)
- H5CX_SET_PROP(H5D_XFER_COLL_RANK0_BCAST_NAME, mpio_coll_rank0_bcast)
+ H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_LINK_HARD_NAME, mpio_coll_chunk_link_hard)
+ H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_MULTI_HARD_NAME, mpio_coll_chunk_multi_hard)
+ H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_LINK_NUM_TRUE_NAME, mpio_coll_chunk_link_num_true)
+ H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_LINK_NUM_FALSE_NAME, mpio_coll_chunk_link_num_false)
+ H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_MULTI_RATIO_COLL_NAME, mpio_coll_chunk_multi_ratio_coll)
+ H5CX_SET_PROP(H5D_XFER_COLL_CHUNK_MULTI_RATIO_IND_NAME, mpio_coll_chunk_multi_ratio_ind)
+ H5CX_SET_PROP(H5D_XFER_COLL_RANK0_BCAST_NAME, mpio_coll_rank0_bcast)
#endif /* H5_HAVE_INSTRUMENTED_LIBRARY */
#endif /* H5_HAVE_PARALLEL */
+ } /* end if */
/* Pop the top context node from the stack */
ret_value = (*head);
@@ -3614,7 +3620,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5CX_pop(void)
+H5CX_pop(hbool_t update_dxpl_props)
{
H5CX_node_t *cnode; /* Context node */
herr_t ret_value = SUCCEED; /* Return value */
@@ -3622,7 +3628,7 @@ H5CX_pop(void)
FUNC_ENTER_NOAPI(FAIL)
/* Perform common operations and get top context from stack */
- if (NULL == (cnode = H5CX__pop_common()))
+ if (NULL == (cnode = H5CX__pop_common(update_dxpl_props)))
HGOTO_ERROR(H5E_CONTEXT, H5E_CANTGET, FAIL, "error getting API context node")
/* Free the context node */