From 178b80b679b874d99287b28898e242533721ea67 Mon Sep 17 00:00:00 2001 From: Raymond Lu Date: Thu, 29 Jul 2010 13:17:32 -0500 Subject: [svn-r19150] Correction from the previous checkin for H5Oattribute.c. Because the attribute structure i 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. --- src/H5Oattribute.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/H5Oattribute.c b/src/H5Oattribute.c index a1dcdc5..dcb129d 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; -- cgit v0.12