mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-30 15:32:37 +08:00
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.
This commit is contained in:
parent
f1c9163c91
commit
10a3bbe680
@ -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:
|
||||
|
@ -139,6 +139,47 @@ done:
|
||||
FUNC_LEAVE_NOAPI(ret_value)
|
||||
} /* H5D__layout_contig_size_test() */
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
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
|
||||
|
19
test/dsets.c
19
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)
|
||||
|
Loading…
Reference in New Issue
Block a user