summaryrefslogtreecommitdiffstats
path: root/src/H5Ocache.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2007-03-10 15:47:59 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2007-03-10 15:47:59 (GMT)
commit6cfd5c146267e771e46d37709c405c7732feeaf0 (patch)
treed9eb91f315735e48eda173531bcaf10269d65db3 /src/H5Ocache.c
parenta127510b7b3049d0e136b677b180c8e644bdc7ea (diff)
downloadhdf5-6cfd5c146267e771e46d37709c405c7732feeaf0.zip
hdf5-6cfd5c146267e771e46d37709c405c7732feeaf0.tar.gz
hdf5-6cfd5c146267e771e46d37709c405c7732feeaf0.tar.bz2
[svn-r13487] Description:
Eliminate message count from new version of object header prefix - it can be computed when the header is loaded and the table of messages is built. Tested on: FreeBSD/32 6.2 (duty)
Diffstat (limited to 'src/H5Ocache.c')
-rw-r--r--src/H5Ocache.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/H5Ocache.c b/src/H5Ocache.c
index 786d1d3..706497f 100644
--- a/src/H5Ocache.c
+++ b/src/H5Ocache.c
@@ -280,6 +280,9 @@ H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * _udata1,
oh->flags = *p++;
if(oh->flags & ~H5O_HDR_ALL_FLAGS)
HGOTO_ERROR(H5E_OHDR, H5E_VERSION, NULL, "unknown object header status flag(s)")
+
+ /* Number of messages (to allocate initially) */
+ nmesgs = 1;
} /* end if */
else {
/* Version */
@@ -292,10 +295,10 @@ H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * _udata1,
/* Reserved */
p++;
- } /* end else */
- /* Number of messages */
- UINT16DECODE(p, nmesgs);
+ /* Number of messages */
+ UINT16DECODE(p, nmesgs);
+ } /* end else */
/* Link count */
UINT32DECODE(p, oh->nlink);
@@ -496,9 +499,12 @@ H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * _udata1,
merged_null_msgs++;
} /* end if */
else {
- /* New message */
- if(oh->nmesgs >= nmesgs)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "corrupt object header - too many messages")
+ /* Check if we need to extend message table to hold the new message */
+ if(oh->nmesgs >= oh->alloc_nmesgs)
+ if(H5O_alloc_msgs(oh, (size_t)1) < 0)
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate more space for messages")
+
+ /* Record information about message */
mesgno = oh->nmesgs++;
oh->mesg[mesgno].type = H5O_msg_class_g[id];
oh->mesg[mesgno].dirty = FALSE;
@@ -574,8 +580,9 @@ H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * _udata1,
oh->cache_info.is_dirty = TRUE;
/* Sanity check for the correct # of messages in object header */
- if((oh->nmesgs + skipped_msgs + merged_null_msgs) != nmesgs)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "corrupt object header - too few messages")
+ if(oh->version == H5O_VERSION_1)
+ if((oh->nmesgs + skipped_msgs + merged_null_msgs) != nmesgs)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "corrupt object header - too few messages")
#ifdef H5O_DEBUG
H5O_assert(oh);
@@ -652,9 +659,6 @@ H5O_assert(oh);
/* Flags */
*p++ = oh->flags;
- /* Number of messages */
- UINT16ENCODE(p, oh->nmesgs);
-
/* Link count */
UINT32ENCODE(p, oh->nlink);