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.
This commit is contained in:
Dana Robinson 2020-03-18 17:07:37 -05:00
commit eecddd9f3e
5 changed files with 28 additions and 3 deletions

View File

@ -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:
-----------------

View File

@ -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);

View File

@ -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 */

View File

@ -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 {

View File

@ -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);