diff options
author | Dana Robinson <derobins@hdfgroup.org> | 2020-03-18 22:07:37 (GMT) |
---|---|---|
committer | Dana Robinson <derobins@hdfgroup.org> | 2020-03-18 22:07:37 (GMT) |
commit | eecddd9f3e80c2d00235e289653a0adbe44136d9 (patch) | |
tree | e79ccbbdb27a932bf75471471ed1fe4deffcf631 | |
parent | 9c93c1bb00d4325867288b3811a6bb4907a51dde (diff) | |
parent | ce7936d2b256bdd5e61a5ef018f35e9562667cac (diff) | |
download | hdf5-eecddd9f3e80c2d00235e289653a0adbe44136d9.zip hdf5-eecddd9f3e80c2d00235e289653a0adbe44136d9.tar.gz hdf5-eecddd9f3e80c2d00235e289653a0adbe44136d9.tar.bz2 |
Merge pull request #2456 in HDFFV/hdf5 from ~DEROBINS/hdf5_der:develop_minor to develop
* commit 'ce7936d2b256bdd5e61a5ef018f35e9562667cac':
Fixed the RELEASE.txt note for HDFFV-11057
Fix shutdown errors when using the HDF5_VOL_CONNECTOR environment variable to set a dynamically loaded plugin as the default VOL connector. Fixes HDFFV-11057
Very minor comment change in H5VLconnector.h.
-rw-r--r-- | release_docs/RELEASE.txt | 11 | ||||
-rw-r--r-- | src/H5.c | 4 | ||||
-rw-r--r-- | src/H5VLconnector.h | 2 | ||||
-rw-r--r-- | src/H5VLint.c | 2 | ||||
-rw-r--r-- | src/H5VLpassthru.c | 12 |
5 files changed, 28 insertions, 3 deletions
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index ff024c3..c7a8e53 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -419,6 +419,17 @@ New Features (ADB - 2018/09/18, HDFFV-10332) + - Fix shutdown failure when using H5VLregister_connector_by_name/value + + When using H5VLregister_connector_by_name/value to dynamically load a + VOL connector plugin, the library can experience segmentation faults + when the library is closed. This is due to the library unloading + the plugin interface before the virtual object layer. Then, when the + VOL shutdown occurs, it will attempt to close the VOL connector, + however this will fail since the plugin will already have been unloaded. + + (DER - 2020/03/18, HDFFV-11057) + Parallel Library: ----------------- @@ -355,7 +355,9 @@ H5_term_library(void) pending += DOWN(Z); pending += DOWN(FD); pending += DOWN(VL); - pending += DOWN(PL); + /* Don't shut down the plugin code until all "pluggable" interfaces (Z, FD, PL) are shut down */ + if(pending == 0) + pending += DOWN(PL); /* Don't shut down the error code until other APIs which use it are shut down */ if(pending == 0) pending += DOWN(E); diff --git a/src/H5VLconnector.h b/src/H5VLconnector.h index 39d9b14..7951a32 100644 --- a/src/H5VLconnector.h +++ b/src/H5VLconnector.h @@ -194,7 +194,7 @@ typedef enum H5VL_object_get_t { H5VL_OBJECT_GET_FILE, /* object file */ H5VL_OBJECT_GET_NAME, /* object name */ H5VL_OBJECT_GET_TYPE, /* object type */ - H5VL_OBJECT_GET_INFO /* H5Oget_info(_by_idx|name)3 */ + H5VL_OBJECT_GET_INFO /* H5Oget_info(_by_idx|name) */ } H5VL_object_get_t; /* types for object SPECIFIC callback */ diff --git a/src/H5VLint.c b/src/H5VLint.c index 6572faa..861629f 100644 --- a/src/H5VLint.c +++ b/src/H5VLint.c @@ -273,7 +273,7 @@ H5VL_term_package(void) else { if(H5I_nmembers(H5I_VOL) > 0) { /* Unregister all VOL connectors */ - (void)H5I_clear_type(H5I_VOL, FALSE, FALSE); + (void)H5I_clear_type(H5I_VOL, TRUE, FALSE); n++; } /* end if */ else { diff --git a/src/H5VLpassthru.c b/src/H5VLpassthru.c index 8b3dc62..2cf470e 100644 --- a/src/H5VLpassthru.c +++ b/src/H5VLpassthru.c @@ -1591,6 +1591,10 @@ H5VL_pass_through_file_create(const char *name, unsigned flags, hid_t fcpl_id, /* Get copy of our VOL info from FAPL */ H5Pget_vol_info(fapl_id, (void **)&info); + /* Make sure we have info about the underlying VOL to be used */ + if (!info) + return NULL; + /* Copy the FAPL */ under_fapl_id = H5Pcopy(fapl_id); @@ -1645,6 +1649,10 @@ H5VL_pass_through_file_open(const char *name, unsigned flags, hid_t fapl_id, /* Get copy of our VOL info from FAPL */ H5Pget_vol_info(fapl_id, (void **)&info); + /* Make sure we have info about the underlying VOL to be used */ + if (!info) + return NULL; + /* Copy the FAPL */ under_fapl_id = H5Pcopy(fapl_id); @@ -1785,6 +1793,10 @@ H5VL_pass_through_file_specific(void *file, H5VL_file_specific_t specific_type, /* Get copy of our VOL info from FAPL */ H5Pget_vol_info(fapl_id, (void **)&info); + /* Make sure we have info about the underlying VOL to be used */ + if (!info) + return (-1); + /* Copy the FAPL */ under_fapl_id = H5Pcopy(fapl_id); |