summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVailin Choi <vchoi@jam.ad.hdfgroup.org>2017-05-09 03:14:20 (GMT)
committerVailin Choi <vchoi@jam.ad.hdfgroup.org>2017-05-09 03:14:20 (GMT)
commitd436db6c6efdfe7e9dbe06a642715116ef0eb5e3 (patch)
tree2a5deb26a9573be49d5e5d5982cba1072ebbe171
parent6a4f1187ccef6fd092cf70154e7ffa33f4c2f648 (diff)
downloadhdf5-d436db6c6efdfe7e9dbe06a642715116ef0eb5e3.zip
hdf5-d436db6c6efdfe7e9dbe06a642715116ef0eb5e3.tar.gz
hdf5-d436db6c6efdfe7e9dbe06a642715116ef0eb5e3.tar.bz2
Fix for the two issues reported in HDFFV-10051
Modifications made based on the review comments from pull request #494 Tested on moohan, mayll, kituo, platypus, ostrich, osx1010test, quail, emu.
-rw-r--r--src/H5Dcompact.c4
-rw-r--r--src/H5Dtest.c41
-rw-r--r--test/dsets.c19
3 files changed, 50 insertions, 14 deletions
diff --git a/src/H5Dcompact.c b/src/H5Dcompact.c
index e542e71..99a25b6 100644
--- a/src/H5Dcompact.c
+++ b/src/H5Dcompact.c
@@ -369,8 +369,10 @@ H5D__compact_flush(H5D_t *dset, hid_t dxpl_id)
/* Check if the buffered compact information is dirty */
if(dset->shared->layout.storage.u.compact.dirty) {
dset->shared->layout.storage.u.compact.dirty = FALSE;
- if(H5O_msg_write(&(dset->oloc), H5O_LAYOUT_ID, 0, H5O_UPDATE_TIME, &(dset->shared->layout), dxpl_id) < 0)
+ if(H5O_msg_write(&(dset->oloc), H5O_LAYOUT_ID, 0, H5O_UPDATE_TIME, &(dset->shared->layout), dxpl_id) < 0) {
+ dset->shared->layout.storage.u.compact.dirty = TRUE;
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to update layout message")
+ }
} /* end if */
done:
diff --git a/src/H5Dtest.c b/src/H5Dtest.c
index 2fc71a0..c2b6199 100644
--- a/src/H5Dtest.c
+++ b/src/H5Dtest.c
@@ -142,6 +142,47 @@ done:
/*--------------------------------------------------------------------------
NAME
+ H5D__layout_compact_dirty_test
+ PURPOSE
+ Determine the "dirty" flag of a compact layout for a dataset's layout information
+ USAGE
+ herr_t H5D__layout_compact_dirty_test(did, dirty)
+ hid_t did; IN: Dataset to query
+ hbool_t *dirty; OUT: Pointer to location to place "dirty" info
+ RETURNS
+ Non-negative on success, negative on failure
+ DESCRIPTION
+ Checks the "dirty" flag of a compact dataset.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ DO NOT USE THIS FUNCTION FOR ANYTHING EXCEPT TESTING
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5D__layout_compact_dirty_test(hid_t did, hbool_t *dirty)
+{
+ H5D_t *dset; /* Pointer to dataset to query */
+ herr_t ret_value = SUCCEED; /* return value */
+
+ FUNC_ENTER_PACKAGE
+
+ /* Check args */
+ if(NULL == (dset = (H5D_t *)H5I_object_verify(did, H5I_DATASET)))
+ HGOTO_ERROR(H5E_DATASET, H5E_BADTYPE, FAIL, "not a dataset")
+
+ if(dirty) {
+ HDassert(dset->shared->layout.type == H5D_COMPACT);
+ *dirty = dset->shared->layout.storage.u.compact.dirty;
+ } /* end if */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* H5D__layout_compact_dirty_test() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
H5D__layout_type_test
PURPOSE
Determine the storage layout type for a dataset
diff --git a/test/dsets.c b/test/dsets.c
index a561ef48..ad014a6 100644
--- a/test/dsets.c
+++ b/test/dsets.c
@@ -17,24 +17,16 @@
*
* Purpose: Tests the dataset interface (H5D)
*/
-
-#define H5D_FRIEND /*suppress error about including H5Dpkg */
-#define H5D_TESTING
-
#define H5FD_FRIEND /*suppress error about including H5FDpkg */
#define H5FD_TESTING
#define H5Z_FRIEND /*suppress error about including H5Zpkg */
-#define H5D_FRIEND /*suppress error about including H5Dpkg */
#include "h5test.h"
#include "H5srcdir.h"
-#include "H5Dpkg.h"
#include "H5FDpkg.h"
#include "H5VMprivate.h"
-#include "H5Iprivate.h"
#include "H5Zpkg.h"
-#include "H5Dpkg.h"
#ifdef H5_HAVE_SZLIB_H
# include "szlib.h"
#endif
@@ -12669,7 +12661,7 @@ test_compact_open_close_dirty(hid_t fapl)
int wbuf[10]; /* Data buffer */
char filename[FILENAME_BUF_SIZE]; /* Filename */
int i; /* Local index variable */
- H5D_t *dset = NULL; /* Internal dataset pointer */
+ hbool_t dirty; /* The dirty flag */
TESTING("compact dataset repeated open/close and dirty flag");
@@ -12721,16 +12713,17 @@ test_compact_open_close_dirty(hid_t fapl)
if((did = H5Dopen2(fid, DSET_COMPACT_MAX_NAME, H5P_DEFAULT)) < 0)
TEST_ERROR
- /* Get the internal dataset pointer */
- if(NULL == (dset = (H5D_t *)H5I_object_verify(did, H5I_DATASET)))
+ /* Retrieve the "dirty" flag from the compact dataset layout */
+ if(H5D__layout_compact_dirty_test(did, &dirty) < 0)
TEST_ERROR
/* Verify that the "dirty" flag is false */
- if(dset->shared->layout.storage.u.compact.dirty)
+ if(dirty)
TEST_ERROR
/* Close the dataset */
- if(H5Dclose(did) < 0) TEST_ERROR
+ if(H5Dclose(did) < 0)
+ TEST_ERROR
/* Close the dataspace */
if(H5Sclose(sid) < 0)