summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/H5Omessage.c17
-rw-r--r--test/ohdr.c33
2 files changed, 37 insertions, 13 deletions
diff --git a/src/H5Omessage.c b/src/H5Omessage.c
index 3538db1..799f267 100644
--- a/src/H5Omessage.c
+++ b/src/H5Omessage.c
@@ -1052,17 +1052,14 @@ H5O_msg_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/, unsigned sequence,
/*
* Keep track of how many times we failed trying to remove constant
* messages.
+ * (OK to remove constant messages - QAK)
*/
- if(mesg->flags & H5O_MSG_FLAG_CONSTANT)
- udata->nfailed++;
- else {
- /* Convert message into a null message */
- if(H5O_release_mesg(udata->f, udata->dxpl_id, oh, mesg, udata->adj_link) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, H5_ITER_ERROR, "unable to release message")
-
- /* Indicate that the object header was modified */
- *oh_modified = TRUE;
- } /* end else */
+ /* Convert message into a null message */
+ if(H5O_release_mesg(udata->f, udata->dxpl_id, oh, mesg, udata->adj_link) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, H5_ITER_ERROR, "unable to release message")
+
+ /* Indicate that the object header was modified */
+ *oh_modified = TRUE;
/* Break out now, if we've found the correct message */
if(udata->sequence == H5O_FIRST || udata->sequence != H5O_ALL)
diff --git a/test/ohdr.c b/test/ohdr.c
index a1d84a7..35ea335 100644
--- a/test/ohdr.c
+++ b/test/ohdr.c
@@ -73,6 +73,7 @@ main(void)
int i;
hbool_t b; /* Index for "new format" loop */
const char *envval = NULL;
+ herr_t ret; /* Generic return value */
/* Reset library */
h5_reset();
@@ -83,9 +84,9 @@ main(void)
for(b = FALSE; b <= TRUE; b++) {
/* Display info about testing */
if(b)
- HDputs("Using new file format");
+ HDputs("Using new file format:");
else
- HDputs("Using default file format");
+ HDputs("Using default file format:");
/* Set the format to use for the file */
if (H5Pset_latest_format(fapl, b) < 0) FAIL_STACK_ERROR
@@ -188,6 +189,7 @@ main(void)
oh_loc.file = f;
if(H5O_open(&oh_loc) < 0)
FAIL_STACK_ERROR
+ PASSED();
} /* end if */
else {
SKIPPED();
@@ -223,6 +225,31 @@ main(void)
PASSED();
+ /*
+ * Constant message handling.
+ * (can't write to them, but should be able to remove them)
+ */
+ TESTING("constant message handling");
+ time_new = 22222222;
+ if(H5O_msg_create(&oh_loc, H5O_MTIME_NEW_ID, H5O_MSG_FLAG_CONSTANT, 0, &time_new, H5P_DATASET_XFER_DEFAULT) < 0)
+ FAIL_STACK_ERROR
+ if(H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, TRUE) < 0)
+ FAIL_STACK_ERROR
+ if(NULL == H5O_msg_read(&oh_loc, H5O_MTIME_NEW_ID, &ro, H5P_DATASET_XFER_DEFAULT))
+ FAIL_STACK_ERROR
+ if(ro != time_new)
+ TEST_ERROR
+ time_new = 33333333;
+ H5E_BEGIN_TRY {
+ ret = H5O_msg_write(&oh_loc, H5O_MTIME_NEW_ID, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT);
+ } H5E_END_TRY;
+ if(ret >= 0)
+ TEST_ERROR
+ if(H5O_msg_remove(&oh_loc, H5O_MTIME_NEW_ID, H5O_ALL, TRUE, H5P_DATASET_XFER_DEFAULT) < 0)
+ FAIL_STACK_ERROR
+ PASSED();
+
+
/* release resources */
TESTING("object header closing");
if(H5O_close(&oh_loc) < 0)
@@ -231,7 +258,7 @@ main(void)
/* Test reading datasets with undefined object header messages */
- TESTING("reading objects with unknown header messages");
+ HDputs("Accessing objects with unknown header messages:");
envval = HDgetenv("HDF5_DRIVER");
if(envval == NULL)
envval = "nomatch";