[svn-r27528] Modify printf implementation to not open source datasets that were previously

opened when calculating the VDS extent, instead assuming they still exist.

Tested: ummon
This commit is contained in:
Neil Fortner 2015-08-19 11:45:36 -05:00
parent 6909d2033f
commit b1dcfc7a84
2 changed files with 13 additions and 4 deletions

View File

@ -776,15 +776,23 @@ H5D__virtual_open_source_dset(const H5D_t *vdset,
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, FAIL, "unable to get path for root group")
/* Open the source dataset */
if(NULL == (source_dset->dset = H5D__open_name(&src_root_loc, source_dset->dset_name, vdset->shared->layout.storage.u.virt.source_dapl, dxpl_id)))
if(NULL == (source_dset->dset = H5D__open_name(&src_root_loc, source_dset->dset_name, vdset->shared->layout.storage.u.virt.source_dapl, dxpl_id))) {
H5E_clear_stack(NULL); /* Quick hack until proper support for H5Dopen with missing file is implemented */
else
/* Dataset does not exist */
source_dset->dset_exists = FALSE;
} /* end if */
else {
/* Dataset exists */
source_dset->dset_exists = TRUE;
/* Patch the source selection if necessary */
if(virtual_ent->source_space_status != H5O_VIRTUAL_STATUS_CORRECT) {
if(H5S_extent_copy(virtual_ent->source_select, source_dset->dset->shared->space) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTCOPY, FAIL, "can't copy source dataspace extent")
virtual_ent->source_space_status = H5O_VIRTUAL_STATUS_CORRECT;
} /* end if */
} /* end else */
} /* end if */
done:
@ -1434,8 +1442,8 @@ H5D__virtual_set_extent_unlim(const H5D_t *dset, hid_t dxpl_id)
} /* end else */
} /* end if */
/* Check if the dataset is already open */
if(storage->list[i].sub_dset[j].dset)
/* Check if the dataset was already opened */
if(storage->list[i].sub_dset[j].dset_exists)
first_missing = j + 1;
else {
/* Resolve file name */

View File

@ -426,6 +426,7 @@ typedef struct H5O_storage_virtual_srcdset_t {
struct H5S_t *clipped_source_select; /* Clipped version of source_select */
struct H5S_t *clipped_virtual_select; /* Clipped version of virtual_select */
struct H5D_t *dset; /* Source dataset */
hbool_t dset_exists; /* Whether the dataset exists (was opened successfully) */
/* Temporary - only used during I/O operation, NULL at all other times */
struct H5S_t *projected_mem_space; /* Selection within mem_space for this mapping */