diff options
author | Mohamad Chaarawi <chaarawi@hdfgroup.org> | 2014-07-29 18:46:19 (GMT) |
---|---|---|
committer | Mohamad Chaarawi <chaarawi@hdfgroup.org> | 2014-07-29 18:46:19 (GMT) |
commit | 4094dc843f1d42c71f4239e084e640454430ce3a (patch) | |
tree | 36b88358507430f973675defbeb2cf12e2a1a227 /src | |
parent | 871d377e65de92637507295a05f67d52167e2af8 (diff) | |
download | hdf5-4094dc843f1d42c71f4239e084e640454430ce3a.zip hdf5-4094dc843f1d42c71f4239e084e640454430ce3a.tar.gz hdf5-4094dc843f1d42c71f4239e084e640454430ce3a.tar.bz2 |
[svn-r25488] - fix bug with H5Fget_access_plist. need to set VOL and VOL info in property
- add tests for H5Fis_accessible in vfd tests to make sure it works with different fapls.
- fix bug in Log VFD driver.
Diffstat (limited to 'src')
-rw-r--r-- | src/H5F.c | 23 | ||||
-rw-r--r-- | src/H5FDlog.c | 10 | ||||
-rw-r--r-- | src/H5Fint.c | 21 | ||||
-rw-r--r-- | src/H5VLnative.c | 3 |
4 files changed, 45 insertions, 12 deletions
@@ -247,23 +247,38 @@ hid_t H5Fget_access_plist(hid_t file_id) { H5VL_t *vol_plugin; - void *obj; - hid_t ret_value; /* Return value */ + void *file; + void *vol_info = NULL; + H5P_genplist_t *plist = NULL; /* Property list pointer */ + hid_t fapl_id = FAIL, ret_value; /* Return value */ FUNC_ENTER_API(FAIL) H5TRACE1("i", "i", file_id); /* get the file object */ - if(NULL == (obj = (void *)H5I_object(file_id))) + if(NULL == (file = (void *)H5I_object(file_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier") /* get the plugin pointer */ if (NULL == (vol_plugin = (H5VL_t *)H5I_get_aux(file_id))) HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "ID does not contain VOL information") - if(H5VL_file_get(obj, vol_plugin, H5VL_FILE_GET_FAPL, H5AC_dxpl_id, H5_EVENT_STACK_NULL, &ret_value) < 0) + if(H5VL_file_get(file, vol_plugin, H5VL_FILE_GET_FAPL, H5AC_dxpl_id, + H5_EVENT_STACK_NULL, &fapl_id, &vol_info) < 0) HGOTO_ERROR(H5E_INTERNAL, H5E_CANTGET, FAIL, "unable to get file creation properties") + /* Set the vol properties for the list */ + if(NULL == (plist = (H5P_genplist_t *)H5I_object_verify(fapl_id, H5I_GENPROP_LST))) + HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list") + if(H5P_set_vol(plist, vol_plugin->cls, vol_info) < 0) + HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set vol") + + ret_value = fapl_id; + done: + if(ret_value < 0 && fapl_id != FAIL) + if(H5I_dec_ref(fapl_id) < 0) + HGOTO_ERROR(H5E_ATOM, H5E_CANTDEC, FAIL, "decrementing plist ID failed") + FUNC_LEAVE_API(ret_value) } /* end H5Fget_access_plist() */ diff --git a/src/H5FDlog.c b/src/H5FDlog.c index cb04b80..fdc2c92 100644 --- a/src/H5FDlog.c +++ b/src/H5FDlog.c @@ -598,6 +598,11 @@ H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr) /* Get the flags for logging */ file->fa.flags = fa->flags; + if(fa->logfile) + file->fa.logfile = HDstrdup(fa->logfile); + else + file->fa.logfile = NULL; + file->fa.buf_size = fa->buf_size; /* Check if we are doing any logging at all */ if(file->fa.flags != 0) { @@ -798,6 +803,11 @@ H5FD_log_close(H5FD_t *_file) HDfclose(file->logfp); } /* end if */ + if(file->fa.logfile) { + HDfree(file->fa.logfile); + file->fa.logfile = NULL; + } + /* Release the file info */ file = H5FL_FREE(H5FD_log_t, file); diff --git a/src/H5Fint.c b/src/H5Fint.c index 6fe465a..1fe046f 100644 --- a/src/H5Fint.c +++ b/src/H5Fint.c @@ -634,26 +634,32 @@ done: htri_t H5F_is_hdf5(const char *name, hid_t fapl_id) { - H5FD_t *file = NULL; /* Low-level file struct */ + H5F_t *file = NULL; /* Low-level file struct */ haddr_t sig_addr; /* Addess of hdf5 file signature */ htri_t ret_value; /* Return value */ FUNC_ENTER_NOAPI_NOINIT /* Open the file at the virtual file layer */ - if(NULL == (file = H5FD_open(name, H5F_ACC_RDONLY, fapl_id, HADDR_UNDEF))) - HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to open file") + //if(NULL == (file = H5FD_open(name, H5F_ACC_RDONLY, fapl_id, HADDR_UNDEF))) + //HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to open file") + + /* Open the file */ + if(NULL == (file = H5F_open(name, H5F_ACC_RDONLY, H5P_FILE_CREATE_DEFAULT, + fapl_id, H5AC_ind_dxpl_id))) + HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FALSE, "unable to open file") /* The file is an hdf5 file if the hdf5 file signature can be found */ - if(H5FD_locate_signature(file, H5AC_ind_dxpl_g, &sig_addr) < 0) - HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FAIL, "unable to locate file signature") + if(H5FD_locate_signature(file->shared->lf, H5AC_ind_dxpl_g, &sig_addr) < 0) + HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FALSE, "unable to locate file signature") ret_value = (HADDR_UNDEF != sig_addr); done: /* Close the file */ if(file) - if(H5FD_close(file) < 0 && ret_value >= 0) - HDONE_ERROR(H5E_IO, H5E_CANTCLOSEFILE, FAIL, "unable to close file") + //if(H5FD_close(file) < 0 && ret_value >= 0) + if(H5F_close(file) < 0 && ret_value >= 0) + HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close file") FUNC_LEAVE_NOAPI(ret_value) } /* end H5F_is_hdf5() */ @@ -1338,7 +1344,6 @@ H5F_close(H5F_t *f) /* Sanity check */ HDassert(f); - HDassert(f->id_exists); /* This routine should only be called when a file ID's ref count drops to zero */ /* Perform checks for "semi" file close degree here, since closing the * file is not allowed if there are objects still open */ diff --git a/src/H5VLnative.c b/src/H5VLnative.c index 6dacb5e..c649650 100644 --- a/src/H5VLnative.c +++ b/src/H5VLnative.c @@ -2347,6 +2347,8 @@ H5VL_native_file_close(void *file, hid_t UNUSED dxpl_id, void UNUSED **req) FUNC_ENTER_NOAPI_NOINIT + HDassert(f->id_exists); /* This routine should only be called when a file ID's ref count drops to zero */ + /* Flush file if this is the last reference to this id and we have write * intent, unless it will be flushed by the "shared" file being closed. * This is only necessary to replicate previous behaviour, and could be @@ -2362,6 +2364,7 @@ H5VL_native_file_close(void *file, hid_t UNUSED dxpl_id, void UNUSED **req) if(H5F_flush(f, H5AC_dxpl_id, FALSE) < 0) HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache") } /* end if */ + /* close the file */ if(H5F_close(f) < 0) HGOTO_ERROR(H5E_FILE, H5E_CANTDEC, FAIL, "can't close file") |