[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:
Quincey Koziol 2007-01-08 23:24:00 -05:00
parent 2104bd1e0a
commit ee6036e032
3 changed files with 499 additions and 397 deletions

View File

@ -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)))

View File

@ -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);

File diff suppressed because it is too large Load Diff