summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Lu <songyulu@hdfgroup.org>2010-07-29 19:02:47 (GMT)
committerRaymond Lu <songyulu@hdfgroup.org>2010-07-29 19:02:47 (GMT)
commit87172f5ba1778c0b5fb7abb9dc840ff5c8694e86 (patch)
tree5948197fcb76b19f5b9fb5d5cb6c3847082c052d
parent617e106e2ec5ac04592a96b55333c9e68860ac10 (diff)
downloadhdf5-87172f5ba1778c0b5fb7abb9dc840ff5c8694e86.zip
hdf5-87172f5ba1778c0b5fb7abb9dc840ff5c8694e86.tar.gz
hdf5-87172f5ba1778c0b5fb7abb9dc840ff5c8694e86.tar.bz2
[svn-r19152] Correction from the previous checkin for H5Oattribute.c. Because the attribute structure it
is shared now. The only situation that requires copying the data is when the metadata cache evicts and reloads this attribute. The attribute structure will be different in that situation. Tested on jam.
-rw-r--r--src/H5Oattribute.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/H5Oattribute.c b/src/H5Oattribute.c
index 722ad54..b3917ff 100644
--- a/src/H5Oattribute.c
+++ b/src/H5Oattribute.c
@@ -849,9 +849,14 @@ H5O_attr_write_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
if(NULL == (chk_proxy = H5O_chunk_protect(udata->f, udata->dxpl_id, oh, mesg->chunkno)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTPROTECT, H5_ITER_ERROR, "unable to load object header chunk")
- /* No need to allocate data buffer or copy the data because the structure is shared
- * now. Only do an assertion check, instead. SLU - 2010/7/28 */
- HDassert(((H5A_t *)mesg->native)->shared == udata->attr->shared);
+ /* Because the attribute structure is shared now. The only situation that requires
+ * copying the data is when the metadata cache evicts and reloads this attribute.
+ * The attribute structure will be different in that situation. SLU-2010/7/29 */
+ if(((H5A_t *)mesg->native)->shared != udata->attr->shared)
+ /* (Needs to occur before updating the shared message, or the hash
+ * value on the old & new messages will be the same) */
+ HDmemcpy(((H5A_t *)mesg->native)->shared->data, udata->attr->shared->data,
+ udata->attr->shared->data_size);
/* Mark the message as modified */
mesg->dirty = TRUE;