summaryrefslogtreecommitdiffstats
path: root/src/H5Oshared.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2007-02-04 07:37:15 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2007-02-04 07:37:15 (GMT)
commit0a8bba91530eb333e7d3f17e18aac12db44eda63 (patch)
tree9b6cf88bc5113878ddeca5facadc1c3347ba0654 /src/H5Oshared.c
parentf555ac654b71f0bcaab99775f8c2fe1dac26bfab (diff)
downloadhdf5-0a8bba91530eb333e7d3f17e18aac12db44eda63.zip
hdf5-0a8bba91530eb333e7d3f17e18aac12db44eda63.tar.gz
hdf5-0a8bba91530eb333e7d3f17e18aac12db44eda63.tar.bz2
[svn-r13232] Description:
Remove the "scaffolding" for shared message method invocation and simplify the way shared messages are dealt with in general. Tested on: FreeBSD/32 6.2 (duty) Mac OS X/32 10.4.8 (amazon)
Diffstat (limited to 'src/H5Oshared.c')
-rw-r--r--src/H5Oshared.c618
1 files changed, 52 insertions, 566 deletions
diff --git a/src/H5Oshared.c b/src/H5Oshared.c
index 8a77744..dafe3d2 100644
--- a/src/H5Oshared.c
+++ b/src/H5Oshared.c
@@ -39,44 +39,6 @@
#include "H5Opkg.h" /* Object headers */
#include "H5SMprivate.h" /* Shared object header messages */
-static void *H5O_shared_decode(H5F_t*, hid_t dxpl_id, unsigned mesg_flags, const uint8_t*);
-static herr_t H5O_shared_encode(H5F_t*, uint8_t*, const void*);
-static void *H5O_shared_copy(const void *_mesg, void *_dest);
-static size_t H5O_shared_size(const H5F_t*, const void *_mesg);
-static herr_t H5O_shared_delete(H5F_t *f, hid_t dxpl_id, const void *_mesg,
- hbool_t adj_link);
-static herr_t H5O_shared_link(H5F_t *f, hid_t dxpl_id, const void *_mesg);
-static herr_t H5O_shared_pre_copy_file(H5F_t *file_src, const H5O_msg_class_t *type,
- const void *mesg_src, hbool_t *deleted, const H5O_copy_t *cpy_info, void *_udata);
-static void *H5O_shared_copy_file(H5F_t *file_src, const H5O_msg_class_t *mesg_type,
- void *native_src, H5F_t *file_dst, hid_t dxpl_id, H5O_copy_t *cpy_info, void *udata);
-static herr_t H5O_shared_debug(H5F_t*, hid_t dxpl_id, const void*, FILE*, int, int);
-
-/* This message derives from H5O message class */
-const H5O_msg_class_t H5O_MSG_SHARED[1] = {{
- H5O_SHARED_ID, /*message id number */
- "shared", /*message name for debugging */
- sizeof(H5O_shared_t), /*native message size */
- H5O_shared_decode, /*decode method */
- H5O_shared_encode, /*encode method */
- H5O_shared_copy, /*copy the native value */
- H5O_shared_size, /*size method */
- NULL, /*no reset method */
- NULL, /*no free method */
- H5O_shared_delete, /*file delete method */
- H5O_shared_link, /*link method */
- NULL, /*get share method */
- NULL, /*set share method */
- NULL, /*can share method */
- NULL, /*is shared method */
- H5O_shared_pre_copy_file, /* pre copy native value to file */
- H5O_shared_copy_file, /* copy native value to file */
- NULL, /* post copy native value to file */
- NULL, /* get creation index */
- NULL, /* set creation index */
- H5O_shared_debug /*debug method */
-}};
-
/* First version, with full symbol table entry as link for object header sharing */
#define H5O_SHARED_VERSION_1 1
@@ -113,14 +75,13 @@ H5FL_BLK_DEFINE(ser_mesg);
*
*-------------------------------------------------------------------------
*/
-void *
+static void *
H5O_shared_read(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared,
- const H5O_msg_class_t *type, void *mesg)
+ const H5O_msg_class_t *type)
{
H5HF_t *fheap = NULL;
uint8_t mesg_buf[H5O_MESG_BUF_SIZE]; /* Buffer for deserializing messages */
uint8_t *buf = NULL; /* Pointer to raw message in heap */
- void *native_mesg = NULL; /* Used for messages shared in heap */
void *ret_value = NULL; /* Return value */
FUNC_ENTER_NOAPI_NOINIT(H5O_shared_read)
@@ -166,39 +127,25 @@ H5O_shared_read(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared,
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "can't read message from fractal heap.")
/* Decode the message */
- if(NULL == (native_mesg = H5O_msg_decode(f, dxpl_id, type->id, buf)))
+ if(NULL == (ret_value = H5O_msg_decode(f, dxpl_id, type->id, buf)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, NULL, "can't decode shared message.")
-
- /* Check if there is a user buffer to fill */
- if(mesg) {
- /* Copy this message to the user's buffer */
- if(NULL == (ret_value = (type->copy)(native_mesg, mesg)))
- HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to copy message to user space")
- } /* end if */
- else {
- /* Otherwise, take ownership of the decoded native message */
- ret_value = native_mesg;
- native_mesg = NULL;
- } /* end else */
} /* end if */
else {
HDassert(shared->flags & H5O_COMMITTED_FLAG);
/* Get the shared message from an object header */
- if(NULL == (ret_value = H5O_msg_read(&(shared->u.oloc), type->id, 0, mesg, dxpl_id)))
+ if(NULL == (ret_value = H5O_msg_read(&(shared->u.oloc), type->id, 0, NULL, dxpl_id)))
HGOTO_ERROR(H5E_OHDR, H5E_READERROR, NULL, "unable to read message")
} /* end else */
/* Mark the message as shared */
- if(type->set_share && (type->set_share)(ret_value, shared) < 0)
+ if((type->set_share)(ret_value, shared) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to set sharing information")
done:
/* Release resources */
if(buf && buf != mesg_buf)
buf = H5FL_BLK_FREE(ser_mesg, buf);
- if(native_mesg)
- H5O_msg_free(type->id, native_mesg);
if(fheap && H5HF_close(fheap, dxpl_id) < 0)
HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, NULL, "can't close fractal heap")
@@ -207,7 +154,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5O_shared_link_adj_new
+ * Function: H5O_shared_link_adj
*
* Purpose: Changes the link count for the object referenced by a shared
* message.
@@ -228,12 +175,12 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_shared_link_adj_new(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared,
+H5O_shared_link_adj(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared,
const H5O_msg_class_t *type, int adjust)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_link_adj_new)
+ FUNC_ENTER_NOAPI_NOINIT(H5O_shared_link_adj)
/* check args */
HDassert(f);
@@ -270,70 +217,11 @@ H5O_shared_link_adj_new(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared,
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_shared_link_adj_new() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5O_shared_link_adj
- *
- * Purpose: Changes the link count for the object referenced by a shared
- * message.
- *
- * This function changes the object header link count and is
- * only relevant for committed messages. Messages shared in
- * the heap are re-shared each time they're written, so their
- * reference count is stored in the file-wide shared message
- * index and is changed in a different place in the code.
- *
- * Return: Success: New link count, or 1 for messages in heap
- * Failure: Negative
- *
- * Programmer: Quincey Koziol
- * koziol@ncsa.uiuc.edu
- * Sep 26 2003
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static int
-H5O_shared_link_adj(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared, int adjust)
-{
- int ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_link_adj)
-
- /* check args */
- HDassert(f);
- HDassert(shared);
-
- /*
- * The shared message is stored in some other object header.
- * The other object header must be in the same file as the
- * new object header. Adjust the reference count on that
- * object header.
- */
- if(shared->flags & H5O_COMMITTED_FLAG) {
- if(shared->u.oloc.file->shared != f->shared)
- HGOTO_ERROR(H5E_LINK, H5E_CANTINIT, FAIL, "interfile hard links are not allowed")
- if((ret_value = H5O_link(&(shared->u.oloc), adjust, dxpl_id)) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, FAIL, "unable to adjust shared object link count")
- } /* end if */
- else {
- /* Messages in the heap don't have file object ref counts; they
- * return 1 as a dummy value.
- */
- HDassert(shared->flags & H5O_SHARED_IN_HEAP_FLAG);
- ret_value = 1;
- } /* end else */
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_shared_link_adj() */
/*-------------------------------------------------------------------------
- * Function: H5O_shared_decode_new
+ * Function: H5O_shared_decode
*
* Purpose: Decodes a shared object message
*
@@ -345,13 +233,13 @@ done:
*-------------------------------------------------------------------------
*/
void *
-H5O_shared_decode_new(H5F_t *f, hid_t dxpl_id, const uint8_t *buf, const H5O_msg_class_t *type)
+H5O_shared_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *buf, const H5O_msg_class_t *type)
{
H5O_shared_t sh_mesg; /* Shared message info */
unsigned version; /* Shared message version */
void *ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_decode_new)
+ FUNC_ENTER_NOAPI_NOINIT(H5O_shared_decode)
/* Check args */
HDassert(f);
@@ -404,104 +292,16 @@ H5O_shared_decode_new(H5F_t *f, hid_t dxpl_id, const uint8_t *buf, const H5O_msg
} /* end else if */
/* Retrieve actual message, through decoded shared message info */
- if(NULL == (ret_value = H5O_shared_read(f, dxpl_id, &sh_mesg, type, NULL)))
+ if(NULL == (ret_value = H5O_shared_read(f, dxpl_id, &sh_mesg, type)))
HGOTO_ERROR(H5E_OHDR, H5E_READERROR, NULL, "unable to retrieve native message")
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_shared_decode_new() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5O_shared_decode
- *
- * Purpose: Decodes a shared object message and returns it.
- *
- * Return: Success: Ptr to a new shared object message.
- *
- * Failure: NULL
- *
- * Programmer: Robb Matzke
- * Thursday, April 2, 1998
- *
- *-------------------------------------------------------------------------
- */
-static void *
-H5O_shared_decode(H5F_t *f, hid_t UNUSED dxpl_id, unsigned UNUSED mesg_flags,
- const uint8_t *buf)
-{
- H5O_shared_t *mesg = NULL;
- unsigned version;
- void *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_decode)
-
- /* Check args */
- HDassert(f);
- HDassert(buf);
-
- /* Decode */
- if(NULL == (mesg = (H5O_shared_t *)H5MM_calloc(sizeof(H5O_shared_t))))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
-
- /* Version */
- version = *buf++;
- if(version < H5O_SHARED_VERSION_1 || version > H5O_SHARED_VERSION_LATEST)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for shared object message")
-
- /* Get the shared information flags
- * Flags are unused before version 3.
- */
- if(version >= H5O_SHARED_VERSION_2)
- mesg->flags = *buf++;
- else {
- mesg->flags = H5O_COMMITTED_FLAG;
- buf++;
- } /* end else */
-
- /* Skip reserved bytes (for version 1) */
- if(version == H5O_SHARED_VERSION_1)
- buf += 6;
-
- /* Body */
- if(version == H5O_SHARED_VERSION_1)
- H5G_obj_ent_decode(f, &buf, &(mesg->u.oloc));
- else if (version >= H5O_SHARED_VERSION_2) {
- /* If this message is in the heap, copy a heap ID.
- * Otherwise, it is a named datatype, so copy an H5O_loc_t.
- */
- if(mesg->flags & H5O_SHARED_IN_HEAP_FLAG) {
- HDassert(version >= H5O_SHARED_VERSION_3 );
- HDmemcpy(&(mesg->u.heap_id), buf, sizeof(mesg->u.heap_id));
- }
- else {
- /* The H5O_COMMITTED_FLAG should be set if this message
- * is from an older version before the flag existed.
- */
- if(version < H5O_SHARED_VERSION_3)
- mesg->flags = H5O_COMMITTED_FLAG;
-
- HDassert(mesg->flags & H5O_COMMITTED_FLAG);
-
- H5F_addr_decode(f, &buf, &(mesg->u.oloc.addr));
- mesg->u.oloc.file = f;
- } /* end else */
- } /* end else if */
-
- /* Set return value */
- ret_value = mesg;
-
-done:
- if(ret_value == NULL)
- if(mesg != NULL)
- H5MM_xfree(mesg);
-
- FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_shared_decode() */
/*-------------------------------------------------------------------------
- * Function: H5O_shared_encode_new
+ * Function: H5O_shared_encode
*
* Purpose: Encodes message _MESG into buffer BUF.
*
@@ -513,11 +313,11 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_shared_encode_new(const H5F_t *f, uint8_t *buf/*out*/, const H5O_shared_t *sh_mesg)
+H5O_shared_encode(const H5F_t *f, uint8_t *buf/*out*/, const H5O_shared_t *sh_mesg)
{
unsigned version;
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_encode_new)
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_encode)
/* Check args */
HDassert(f);
@@ -546,60 +346,6 @@ H5O_shared_encode_new(const H5F_t *f, uint8_t *buf/*out*/, const H5O_shared_t *s
H5F_addr_encode(f, &buf, sh_mesg->u.oloc.addr);
FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5O_shared_encode_new() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5O_shared_encode
- *
- * Purpose: Encodes message _MESG into buffer BUF.
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Robb Matzke
- * Thursday, April 2, 1998
- *
- * Modifications:
- * Robb Matzke, 1998-07-20
- * Added a version number to the beginning of the message.
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5O_shared_encode(H5F_t *f, uint8_t *buf/*out*/, const void *_mesg)
-{
- const H5O_shared_t *mesg = (const H5O_shared_t *)_mesg;
- unsigned version;
-
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_encode)
-
- /* Check args */
- HDassert(f);
- HDassert(buf);
- HDassert(mesg);
-
- /* If this message is shared in the heap, we need to use version 3 of the
- * encoding and encode the SHARED_IN_HEAP flag.
- */
- if(mesg->flags & H5O_SHARED_IN_HEAP_FLAG || H5F_USE_LATEST_FORMAT(f))
- version = H5O_SHARED_VERSION_LATEST;
- else {
- HDassert(mesg->flags & H5O_COMMITTED_FLAG);
- version = H5O_SHARED_VERSION_2; /* version 1 is no longer used */
- } /* end else */
-
- *buf++ = version;
- *buf++ = (unsigned)mesg->flags;
-
- /* Encode either the heap ID of the message or the address of the
- * object header that holds it.
- */
- if(mesg->flags & H5O_SHARED_IN_HEAP_FLAG)
- HDmemcpy(buf, &(mesg->u.heap_id), sizeof(mesg->u.heap_id));
- else
- H5F_addr_encode(f, &buf, mesg->u.oloc.addr);
-
- FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5O_shared_encode() */
@@ -619,40 +365,33 @@ H5O_shared_encode(H5F_t *f, uint8_t *buf/*out*/, const void *_mesg)
*
*-------------------------------------------------------------------------
*/
-static void *
-H5O_shared_copy(const void *_mesg, void *_dest)
+herr_t
+H5O_shared_copy(void *_dst, const H5O_shared_t *src)
{
- const H5O_shared_t *mesg = (const H5O_shared_t *) _mesg;
- H5O_shared_t *dest = (H5O_shared_t *) _dest;
- void *ret_value; /* Return value */
+ H5O_shared_t *dst = (H5O_shared_t *)_dst;
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_copy)
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_copy)
/* check args */
- HDassert(mesg);
- if(!dest && NULL == (dest = (H5O_shared_t *)H5MM_malloc(sizeof(H5O_shared_t))))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ HDassert(dst);
+ HDassert(src);
/* copy */
- dest->flags = mesg->flags;
- if(mesg->flags & H5O_COMMITTED_FLAG)
- H5O_loc_copy(&(dest->u.oloc), &(mesg->u.oloc), H5_COPY_DEEP);
- else if(mesg->flags & H5O_SHARED_IN_HEAP_FLAG)
- dest->u.heap_id = mesg->u.heap_id;
+ dst->flags = src->flags;
+ if(src->flags & H5O_COMMITTED_FLAG)
+ H5O_loc_copy(&(dst->u.oloc), &(src->u.oloc), H5_COPY_DEEP);
+ else if(src->flags & H5O_SHARED_IN_HEAP_FLAG)
+ dst->u.heap_id = src->u.heap_id;
else
/* This message's sharing information is being reset */
- HDassert(mesg->flags == H5O_NOT_SHARED);
-
- /* Set return value */
- ret_value = dest;
+ HDassert(src->flags == H5O_NOT_SHARED);
-done:
- FUNC_LEAVE_NOAPI(ret_value)
+ FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5O_shared_copy() */
/*-------------------------------------------------------------------------
- * Function: H5O_shared_size_new
+ * Function: H5O_shared_size
*
* Purpose: Returns the length of a shared object message.
*
@@ -665,11 +404,11 @@ done:
*-------------------------------------------------------------------------
*/
size_t
-H5O_shared_size_new(const H5F_t *f, const H5O_shared_t *sh_mesg)
+H5O_shared_size(const H5F_t *f, const H5O_shared_t *sh_mesg)
{
size_t ret_value; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_size_new)
+ FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_size)
if(sh_mesg->flags & H5O_COMMITTED_FLAG) {
ret_value = 1 + /*version */
@@ -684,49 +423,11 @@ H5O_shared_size_new(const H5F_t *f, const H5O_shared_t *sh_mesg)
} /* end else */
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_shared_size_new() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5O_shared_size
- *
- * Purpose: Returns the length of a shared object message.
- *
- * Return: Success: Length
- *
- * Failure: 0
- *
- * Programmer: Robb Matzke
- * Thursday, April 2, 1998
- *
- *-------------------------------------------------------------------------
- */
-static size_t
-H5O_shared_size(const H5F_t *f, const void *_mesg)
-{
- const H5O_shared_t *shared = (const H5O_shared_t *)_mesg;
- size_t ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_size)
-
- if(shared->flags & H5O_COMMITTED_FLAG) {
- ret_value = 1 + /*version */
- 1 + /*the flags field */
- H5F_SIZEOF_ADDR(f); /*sharing by another obj hdr */
- } /* end if */
- else {
- HDassert(shared->flags & H5O_SHARED_IN_HEAP_FLAG);
- ret_value = 1 + /*version */
- 1 + /*the flags field */
- H5O_FHEAP_ID_LEN; /* Shared in the heap */
- } /* end else */
-
- FUNC_LEAVE_NOAPI(ret_value)
} /* end H5O_shared_size() */
/*-------------------------------------------------------------------------
- * Function: H5O_shared_delete_new
+ * Function: H5O_shared_delete
*
* Purpose: Free file space referenced by message
*
@@ -738,61 +439,16 @@ H5O_shared_size(const H5F_t *f, const void *_mesg)
*-------------------------------------------------------------------------
*/
herr_t
-H5O_shared_delete_new(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *sh_mesg,
+H5O_shared_delete(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *sh_mesg,
const H5O_msg_class_t *type, hbool_t adj_link)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_delete_new)
-
- /* check args */
- HDassert(f);
- HDassert(sh_mesg);
-
- /*
- * Committed datatypes increment the OH of the original message when they
- * are written (in H5O_shared_link) and decrement it here.
- * SOHMs in the heap behave differently; their refcount is incremented
- * during H5SM_share when they are going to be written (in H5O_msg_append
- * or H5O_msg_write). Their refcount in the SOHM indexes still needs to
- * be decremented when they're deleted (in H5O_shared_link_adj).
- */
-
- /* Decrement the reference count on the shared object, if requested */
- if(adj_link)
- if(H5O_shared_link_adj_new(f, dxpl_id, sh_mesg, type, -1) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, FAIL, "unable to adjust shared object link count")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_shared_delete_new() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5O_shared_delete
- *
- * Purpose: Free file space referenced by message
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * Friday, September 26, 2003
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5O_shared_delete(H5F_t *f, hid_t dxpl_id, const void *_mesg, hbool_t adj_link)
-{
- const H5O_shared_t *shared = (const H5O_shared_t *) _mesg;
- herr_t ret_value = SUCCEED; /* Return value */
-
FUNC_ENTER_NOAPI_NOINIT(H5O_shared_delete)
/* check args */
HDassert(f);
- HDassert(shared);
+ HDassert(sh_mesg);
/*
* Committed datatypes increment the OH of the original message when they
@@ -805,7 +461,7 @@ H5O_shared_delete(H5F_t *f, hid_t dxpl_id, const void *_mesg, hbool_t adj_link)
/* Decrement the reference count on the shared object, if requested */
if(adj_link)
- if(H5O_shared_link_adj(f, dxpl_id, shared, -1) < 0)
+ if(H5O_shared_link_adj(f, dxpl_id, sh_mesg, type, -1) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, FAIL, "unable to adjust shared object link count")
done:
@@ -814,7 +470,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5O_shared_link_new
+ * Function: H5O_shared_link
*
* Purpose: Increment reference count on any objects referenced by
* message
@@ -827,53 +483,19 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_shared_link_new(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *sh_mesg,
+H5O_shared_link(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *sh_mesg,
const H5O_msg_class_t *type)
{
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_link_new)
-
- /* check args */
- HDassert(f);
- HDassert(sh_mesg);
-
- /* Increment the reference count on the shared object */
- if(H5O_shared_link_adj_new(f, dxpl_id, sh_mesg, type, 1) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, FAIL, "unable to adjust shared object link count")
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_shared_link_new() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5O_shared_link
- *
- * Purpose: Increment reference count on any objects referenced by
- * message
- *
- * Return: Non-negative on success/Negative on failure
- *
- * Programmer: Quincey Koziol
- * Friday, September 26, 2003
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5O_shared_link(H5F_t *f, hid_t dxpl_id, const void *_mesg)
-{
- const H5O_shared_t *shared = (const H5O_shared_t *) _mesg;
- herr_t ret_value = SUCCEED; /* Return value */
-
FUNC_ENTER_NOAPI_NOINIT(H5O_shared_link)
/* check args */
HDassert(f);
- HDassert(shared);
+ HDassert(sh_mesg);
/* Increment the reference count on the shared object */
- if(H5O_shared_link_adj(f, dxpl_id, shared, 1) < 0)
+ if(H5O_shared_link_adj(f, dxpl_id, sh_mesg, type, 1) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, FAIL, "unable to adjust shared object link count")
done:
@@ -882,55 +504,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5O_shared_pre_copy_file
- *
- * Purpose: Perform any necessary actions before copying message between
- * files for shared messages.
- *
- * Return: Success: Non-negative
- *
- * Failure: Negative
- *
- * Programmer: Peter Cao
- * Saturday, February 11, 2006
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5O_shared_pre_copy_file(H5F_t *file_src, const H5O_msg_class_t *type,
- const void *native_src, hbool_t *deleted, const H5O_copy_t *cpy_info,
- void *udata)
-{
- const H5O_shared_t *shared_src = (const H5O_shared_t *)native_src;
- void *mesg_native = NULL;
- herr_t ret_value = SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_pre_copy_file)
-
- /* check args */
- HDassert(file_src);
- HDassert(type);
-
- if(type->pre_copy_file) {
- /* Go get the actual shared message */
- if(NULL == (mesg_native = H5O_shared_read(file_src, H5AC_dxpl_id, shared_src, type, NULL)))
- HGOTO_ERROR(H5E_OHDR, H5E_READERROR, FAIL, "unable to load object header")
-
- /* Perform "pre copy" operation on messge */
- if((type->pre_copy_file)(file_src, type, mesg_native, deleted, cpy_info, udata) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to perform 'pre copy' operation on message")
- } /* end of if */
-
-done:
- if(mesg_native)
- H5O_msg_free_real(type, mesg_native);
-
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5O_shared_pre_copy_file() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5O_shared_copy_file_new
+ * Function: H5O_shared_copy_file
*
* Purpose: Copies a message from _MESG to _DEST in file
*
@@ -943,7 +517,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_shared_copy_file_new(H5F_t *file_src, H5F_t *file_dst, hid_t dxpl_id,
+H5O_shared_copy_file(H5F_t *file_src, H5F_t *file_dst, hid_t dxpl_id,
const H5O_msg_class_t *mesg_type, const void *_native_src, void *_native_dst,
H5O_copy_t *cpy_info, void UNUSED *udata)
{
@@ -951,7 +525,7 @@ H5O_shared_copy_file_new(H5F_t *file_src, H5F_t *file_dst, hid_t dxpl_id,
H5O_shared_t *shared_dst = (H5O_shared_t *)_native_dst; /* Alias to shared info in native destination message */
herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_copy_file_new)
+ FUNC_ENTER_NOAPI_NOINIT(H5O_shared_copy_file)
/* check args */
HDassert(file_src);
@@ -983,90 +557,6 @@ H5O_shared_copy_file_new(H5F_t *file_src, H5F_t *file_dst, hid_t dxpl_id,
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5O_shared_copy_file_new() */
-
-
-/*-------------------------------------------------------------------------
- * Function: H5O_shared_copy_file
- *
- * Purpose: Copies a message from _MESG to _DEST in file
- *
- * Return: Success: Ptr to _DEST
- *
- * Failure: NULL
- *
- * Programmer: Quincey Koziol
- * November 1, 2005
- *
- *-------------------------------------------------------------------------
- */
-static void *
-H5O_shared_copy_file(H5F_t *file_src, const H5O_msg_class_t *mesg_type,
- void *native_src, H5F_t *file_dst, hid_t dxpl_id, H5O_copy_t *cpy_info,
- void *udata)
-{
- H5O_shared_t *shared_src = (H5O_shared_t *)native_src;
- H5O_shared_t *shared_dst = NULL; /* The destination message if
- * it is a shared message */
- void *dst_mesg = NULL; /* The destination message if
- * it's an unshared message */
- void *ret_value; /* Return value */
-
- FUNC_ENTER_NOAPI_NOINIT(H5O_shared_copy_file)
-
- /* check args */
- HDassert(shared_src);
- HDassert(file_dst);
- HDassert(cpy_info);
-
- /* Committed shared messages create a shared message at the destination
- * and also copy the committed object that they point to.
- * SOHMs actually write a non-shared message at the destination.
- */
- if(shared_src->flags & H5O_COMMITTED_FLAG) {
- /* Allocate space for the destination message */
- if(NULL == (shared_dst = (H5O_shared_t *)H5MM_malloc(sizeof(H5O_shared_t))))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
-
- /* Reset group entry for new object */
- H5O_loc_reset(&(shared_dst->u.oloc));
- shared_dst->u.oloc.file = file_dst;
-
- /* Set flags for new shared object */
- shared_dst->flags = shared_src->flags;
-
- /* Copy the shared object from source to destination */
- if(H5O_copy_header_map(&(shared_src->u.oloc), &(shared_dst->u.oloc), dxpl_id, cpy_info, FALSE) < 0)
- HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy object")
-
- /* Set return value */
- ret_value = shared_dst;
- } /* end if */
- else {
- HDassert(shared_src->flags & H5O_SHARED_IN_HEAP_FLAG);
-
- /* Read the shared message to get the original message */
- if(NULL == (dst_mesg = H5O_shared_read(file_src, dxpl_id, shared_src, mesg_type, NULL)))
- HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, NULL, "unable to read shared message")
-
- if(mesg_type->copy_file) {
- /* Copy the original, un-shared message and return it */
- ret_value = (mesg_type->copy_file)(file_src, mesg_type, dst_mesg, file_dst, dxpl_id, cpy_info, udata);
- H5O_msg_free(mesg_type->id, dst_mesg);
- } /* end else */
- else
- ret_value = dst_mesg;
- } /* end else */
-
-done:
- if(!ret_value) {
- if(shared_dst)
- H5O_msg_free(H5O_SHARED_ID, shared_dst);
- if(dst_mesg)
- H5O_msg_free(mesg_type->id, dst_mesg);
- } /* end if */
-
- FUNC_LEAVE_NOAPI(ret_value)
} /* H5O_shared_copy_file() */
@@ -1080,43 +570,39 @@ done:
* Programmer: Robb Matzke
* Thursday, April 2, 1998
*
- * Modifications:
- *
*-------------------------------------------------------------------------
*/
-static herr_t
-H5O_shared_debug (H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_mesg,
- FILE *stream, int indent, int fwidth)
+herr_t
+H5O_shared_debug(const H5O_shared_t *mesg, FILE *stream, int indent, int fwidth)
{
- const H5O_shared_t *mesg = (const H5O_shared_t *)_mesg;
-
FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_debug)
/* Check args */
- HDassert(f);
HDassert(mesg);
HDassert(stream);
HDassert(indent >= 0);
HDassert(fwidth >= 0);
- if(mesg->flags & H5O_COMMITTED_FLAG)
- {
+ HDfprintf(stream, "%*s%-*s %x\n", indent, "", fwidth,
+ "Shared Message Flags:",
+ mesg->flags);
+ if(mesg->flags & H5O_COMMITTED_FLAG) {
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Sharing method:",
"Obj Hdr");
HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
"Object address:",
mesg->u.oloc.addr);
- }
- else
- {
+ } /* end if */
+ else {
+ HDassert(mesg->flags & H5O_SHARED_IN_HEAP_FLAG);
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Sharing method:",
"SOHM Heap");
HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
"Heap ID:",
mesg->u.heap_id);
- }
+ } /* end else */
FUNC_LEAVE_NOAPI(SUCCEED)
} /* end H5O_shared_debug() */