mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-23 16:20:57 +08:00
[svn-r13123] Description:
Fix object header message code to respect the "do not share" flag, so that committed datatypes used in attributes are handled properly. Add more tests for atttributes, checking that they handle shared attributes in compact & dense storage w/committed datatypes. Tested on: FreeBSD/32 6.1 (duty)
This commit is contained in:
parent
2104bd1e0a
commit
ee6036e032
@ -215,11 +215,13 @@ H5O_msg_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned type_id,
|
||||
HDassert(oh_flags_ptr);
|
||||
|
||||
/* Should this message be written as a SOHM? */
|
||||
if((shared_mesg = H5SM_try_share(f, dxpl_id, type_id, mesg)) > 0)
|
||||
/* Mark the message as shared */
|
||||
mesg_flags |= H5O_MSG_FLAG_SHARED;
|
||||
else if(shared_mesg < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "error determining if message should be shared")
|
||||
if(!(mesg_flags & H5O_MSG_FLAG_DONTSHARE)) {
|
||||
if((shared_mesg = H5SM_try_share(f, dxpl_id, type_id, mesg)) > 0)
|
||||
/* Mark the message as shared */
|
||||
mesg_flags |= H5O_MSG_FLAG_SHARED;
|
||||
else if(shared_mesg < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "error determining if message should be shared")
|
||||
} /* end if */
|
||||
|
||||
/* Append new message to object header */
|
||||
if(H5O_msg_append_real(f, dxpl_id, oh, type, mesg_flags, update_flags, mesg, oh_flags_ptr) < 0)
|
||||
@ -335,11 +337,13 @@ H5O_msg_write(H5O_loc_t *loc, unsigned type_id, unsigned overwrite,
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file")
|
||||
|
||||
/* Should this message be written as a SOHM? */
|
||||
if((shared_mesg = H5SM_try_share(loc->file, dxpl_id, type_id, mesg)) > 0)
|
||||
/* Mark the message as shared */
|
||||
mesg_flags |= H5O_MSG_FLAG_SHARED;
|
||||
else if(shared_mesg < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "error while trying to share message")
|
||||
if(!(mesg_flags & H5O_MSG_FLAG_DONTSHARE)) {
|
||||
if((shared_mesg = H5SM_try_share(loc->file, dxpl_id, type_id, mesg)) > 0)
|
||||
/* Mark the message as shared */
|
||||
mesg_flags |= H5O_MSG_FLAG_SHARED;
|
||||
else if(shared_mesg < 0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "error while trying to share message")
|
||||
} /* end if */
|
||||
|
||||
/* Protect the object header */
|
||||
if(NULL == (oh = H5AC_protect(loc->file, dxpl_id, H5AC_OHDR, loc->addr, NULL, NULL, H5AC_WRITE)))
|
||||
|
@ -304,7 +304,7 @@ H5T_commit(H5F_t *file, H5T_t *type, hid_t dxpl_id, hid_t tcpl_id, hid_t UNUSED
|
||||
|
||||
/* Mark datatype as being on memory now. Since this datatype may still be used in memory
|
||||
* after committed to disk, change its size back as in memory. */
|
||||
if(H5T_set_loc(type, NULL, H5T_LOC_MEMORY)<0)
|
||||
if(H5T_set_loc(type, NULL, H5T_LOC_MEMORY) < 0)
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "cannot mark datatype in memory")
|
||||
|
||||
done:
|
||||
@ -783,7 +783,7 @@ H5T_open_oid(H5G_loc_t *loc, hid_t dxpl_id)
|
||||
H5T_t *dt = NULL;
|
||||
H5T_t *ret_value;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5T_open_oid, NULL)
|
||||
FUNC_ENTER_NOAPI_NOINIT(H5T_open_oid)
|
||||
|
||||
HDassert(loc);
|
||||
|
||||
|
868
test/tattr.c
868
test/tattr.c
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user