diff options
-rw-r--r-- | src/H5Omessage.c | 17 | ||||
-rw-r--r-- | test/ohdr.c | 33 |
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"; |