summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--release_docs/RELEASE.txt3
-rw-r--r--src/H5.c2
-rw-r--r--src/H5A.c83
-rw-r--r--src/H5AC.c853
-rw-r--r--src/H5ACprivate.h62
-rw-r--r--src/H5Aprivate.h2
-rw-r--r--src/H5B.c251
-rw-r--r--src/H5Bprivate.h33
-rw-r--r--src/H5D.c258
-rw-r--r--src/H5Distore.c151
-rw-r--r--src/H5Dprivate.h12
-rw-r--r--src/H5Dseq.c80
-rw-r--r--src/H5F.c109
-rw-r--r--src/H5FD.c132
-rw-r--r--src/H5FDcore.c113
-rw-r--r--src/H5FDfamily.c6
-rw-r--r--src/H5FDlog.c11
-rw-r--r--src/H5FDmpio.c63
-rw-r--r--src/H5FDmpio.h9
-rw-r--r--src/H5FDmpiposix.c4
-rw-r--r--src/H5FDmulti.c22
-rw-r--r--src/H5FDprivate.h10
-rw-r--r--src/H5FDpublic.h14
-rw-r--r--src/H5FDsec2.c4
-rw-r--r--src/H5FDsrb.c4
-rw-r--r--src/H5FDstdio.c6
-rw-r--r--src/H5Farray.c84
-rw-r--r--src/H5Fistore.c151
-rw-r--r--src/H5Fpkg.h26
-rw-r--r--src/H5Fprivate.h10
-rw-r--r--src/H5Fseq.c80
-rw-r--r--src/H5G.c235
-rw-r--r--src/H5Gent.c4
-rw-r--r--src/H5Gnode.c372
-rw-r--r--src/H5Gpkg.h17
-rw-r--r--src/H5Gprivate.h55
-rw-r--r--src/H5Gstab.c30
-rw-r--r--src/H5HG.c214
-rw-r--r--src/H5HGprivate.h14
-rw-r--r--src/H5HL.c139
-rw-r--r--src/H5HLprivate.h14
-rw-r--r--src/H5MF.c12
-rw-r--r--src/H5MFprivate.h6
-rw-r--r--src/H5O.c260
-rw-r--r--src/H5Oattr.c18
-rw-r--r--src/H5Obogus.c8
-rw-r--r--src/H5Ocont.c8
-rw-r--r--src/H5Odtype.c14
-rw-r--r--src/H5Oefl.c12
-rw-r--r--src/H5Ofill.c22
-rw-r--r--src/H5Ofphdf5.c8
-rw-r--r--src/H5Olayout.c8
-rw-r--r--src/H5Omtime.c12
-rw-r--r--src/H5Oname.c8
-rw-r--r--src/H5Opline.c8
-rw-r--r--src/H5Oplist.c8
-rw-r--r--src/H5Oprivate.h37
-rw-r--r--src/H5Osdspace.c8
-rw-r--r--src/H5Oshared.c10
-rw-r--r--src/H5Ostab.c8
-rw-r--r--src/H5Pdcpl.c4
-rw-r--r--src/H5Pfapl.c6
-rw-r--r--src/H5R.c50
-rw-r--r--src/H5S.c16
-rw-r--r--src/H5Sprivate.h8
-rw-r--r--src/H5T.c290
-rw-r--r--src/H5Tconv.c246
-rw-r--r--src/H5Tpkg.h16
-rw-r--r--src/H5Tprivate.h12
-rw-r--r--src/H5Tvlen.c22
-rw-r--r--test/gheap.c16
-rw-r--r--test/istore.c12
-rw-r--r--test/lheap.c6
-rw-r--r--test/ohdr.c38
-rw-r--r--testpar/t_dset.c21
-rw-r--r--tools/misc/h5debug.c17
76 files changed, 2864 insertions, 2133 deletions
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 38a5a75..202ca58 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -35,6 +35,9 @@ Bug Fixes since HDF5-1.4.0
Library
-------
+ * Corrected metadata caching bug in parallel I/O which could cause hangs
+ when chunked datasets were accessed with independent transfer mode.
+ QAK - 2003/02/10
* Corrected memory/resource leaks in per-thread key information when
thread-safe operation was enabled. QAK - 2003/02/07
* H5Fopen without the H5F_ACC_CREAT flag should not succeed in creating
diff --git a/src/H5.c b/src/H5.c
index 18b3df3..2c5f532 100644
--- a/src/H5.c
+++ b/src/H5.c
@@ -146,6 +146,8 @@ H5_init_library(void)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize datatype interface");
if (H5D_init()<0)
HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize dataset interface");
+ if (H5AC_init()<0)
+ HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize metadata caching interface");
/* Debugging? */
H5_debug_mask("-all");
diff --git a/src/H5A.c b/src/H5A.c
index 5818a68..31530cb 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -38,11 +38,13 @@ static herr_t H5A_init_interface(void);
/* PRIVATE PROTOTYPES */
static hid_t H5A_create(const H5G_entry_t *ent, const char *name,
- const H5T_t *type, const H5S_t *space);
-static hid_t H5A_open(H5G_entry_t *ent, unsigned idx);
-static herr_t H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf);
-static herr_t H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf);
-static int H5A_get_index(H5G_entry_t *ent, const char *name);
+ const H5T_t *type, const H5S_t *space, hid_t dxpl_id);
+static hid_t H5A_open(H5G_entry_t *ent, unsigned idx, hid_t dxpl_id);
+static herr_t H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id);
+static herr_t H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id);
+static int H5A_get_index(H5G_entry_t *ent, const char *name, hid_t dxpl_id);
+static hsize_t H5A_get_storage_size(H5A_t *attr);
+static herr_t H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name, hid_t dxpl_id);
/*--------------------------------------------------------------------------
@@ -175,7 +177,7 @@ H5Acreate(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
/* Go do the real work for attaching the attribute to the dataset */
- if ((ret_value=H5A_create(ent,name,type,space))<0)
+ if ((ret_value=H5A_create(ent,name,type,space, H5AC_dxpl_id))<0)
HGOTO_ERROR (H5E_ATTR, H5E_CANTINIT, FAIL, "unable to create attribute");
done:
@@ -209,7 +211,7 @@ done:
*/
static hid_t
H5A_create(const H5G_entry_t *ent, const char *name, const H5T_t *type,
- const H5S_t *space)
+ const H5S_t *space, hid_t dxpl_id)
{
H5A_t *attr = NULL;
H5A_t found_attr;
@@ -260,7 +262,7 @@ H5A_create(const H5G_entry_t *ent, const char *name, const H5T_t *type,
/* Read in the existing attributes to check for duplicates */
seq=0;
- while(H5O_read(&(attr->ent), H5O_ATTR, seq, &found_attr)!=NULL) {
+ while(H5O_read(&(attr->ent), H5O_ATTR, seq, &found_attr, dxpl_id)!=NULL) {
/*
* Compare found attribute name to new attribute name reject creation
* if names are the same.
@@ -275,7 +277,7 @@ H5A_create(const H5G_entry_t *ent, const char *name, const H5T_t *type,
H5E_clear ();
/* Create the attribute message and save the attribute index */
- if (H5O_modify(&(attr->ent), H5O_ATTR, H5O_NEW_MESG, 0, 1, attr) < 0)
+ if (H5O_modify(&(attr->ent), H5O_ATTR, H5O_NEW_MESG, 0, 1, attr, dxpl_id) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to update attribute header messages");
/* Register the new attribute and get an ID for it */
@@ -316,7 +318,7 @@ done:
object header.
--------------------------------------------------------------------------*/
static int
-H5A_get_index(H5G_entry_t *ent, const char *name)
+H5A_get_index(H5G_entry_t *ent, const char *name, hid_t dxpl_id)
{
H5A_t found_attr;
int i; /* Index variable */
@@ -329,7 +331,7 @@ H5A_get_index(H5G_entry_t *ent, const char *name)
/* Look up the attribute for the object */
i=0;
- while(H5O_read(ent, H5O_ATTR, i, &found_attr)!=NULL) {
+ while(H5O_read(ent, H5O_ATTR, i, &found_attr, dxpl_id)!=NULL) {
/*
* Compare found attribute name to new attribute name reject creation
* if names are the same.
@@ -397,11 +399,11 @@ H5Aopen_name(hid_t loc_id, const char *name)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name");
/* Look up the attribute for the object */
- if((idx=H5A_get_index(ent,name))<0)
+ if((idx=H5A_get_index(ent,name, H5AC_dxpl_id))<0)
HGOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "attribute not found");
/* Go do the real work for opening the attribute */
- if ((ret_value=H5A_open(ent, (unsigned)idx))<0)
+ if ((ret_value=H5A_open(ent, (unsigned)idx, H5AC_dxpl_id))<0)
HGOTO_ERROR (H5E_ATTR, H5E_CANTINIT, FAIL, "unable to open attribute");
done:
@@ -452,7 +454,7 @@ H5Aopen_idx(hid_t loc_id, unsigned idx)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
/* Go do the real work for opening the attribute */
- if ((ret_value=H5A_open(ent, idx))<0)
+ if ((ret_value=H5A_open(ent, idx, H5AC_dxpl_id))<0)
HGOTO_ERROR (H5E_ATTR, H5E_CANTINIT, FAIL, "unable to open attribute");
done:
@@ -483,7 +485,7 @@ done:
*-------------------------------------------------------------------------
*/
static hid_t
-H5A_open(H5G_entry_t *ent, unsigned idx)
+H5A_open(H5G_entry_t *ent, unsigned idx, hid_t dxpl_id)
{
H5A_t *attr = NULL;
hid_t ret_value = FAIL;
@@ -495,7 +497,7 @@ H5A_open(H5G_entry_t *ent, unsigned idx)
/* Read in attribute with H5O_read() */
H5_CHECK_OVERFLOW(idx,unsigned,int);
- if (NULL==(attr=H5O_read(ent, H5O_ATTR, (int)idx, attr)))
+ if (NULL==(attr=H5O_read(ent, H5O_ATTR, (int)idx, attr, dxpl_id)))
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to load attribute info from dataset header");
attr->initialized=1;
@@ -561,7 +563,7 @@ H5Awrite(hid_t attr_id, hid_t type_id, const void *buf)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null attribute buffer");
/* Go write the actual data to the attribute */
- if ((ret_value=H5A_write(attr,mem_type,buf))<0)
+ if ((ret_value=H5A_write(attr,mem_type,buf, H5AC_dxpl_id))<0)
HGOTO_ERROR(H5E_ATTR, H5E_WRITEERROR, FAIL, "unable to write attribute");
done:
@@ -588,7 +590,7 @@ done:
This function writes a complete attribute to disk.
--------------------------------------------------------------------------*/
static herr_t
-H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf)
+H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id)
{
uint8_t *tconv_buf = NULL; /* data type conv buffer */
uint8_t *bkg_buf = NULL; /* temp conversion buffer */
@@ -625,7 +627,7 @@ H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf)
/* Convert memory buffer into disk buffer */
/* Set up type conversion function */
- if (NULL == (tpath = H5T_path_find(mem_type, attr->dt, NULL, NULL))) {
+ if (NULL == (tpath = H5T_path_find(mem_type, attr->dt, NULL, NULL, dxpl_id))) {
HGOTO_ERROR(H5E_ATTR, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types");
} else if (!H5T_IS_NOOP(tpath)) {
if ((src_id = H5I_register(H5I_DATATYPE, H5T_copy(mem_type, H5T_COPY_ALL)))<0 ||
@@ -635,7 +637,7 @@ H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf)
/* Perform data type conversion */
if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, 0, tconv_buf, bkg_buf,
- H5P_DATASET_XFER_DEFAULT)<0) {
+ dxpl_id)<0) {
HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL,
"data type conversion failed");
}
@@ -645,12 +647,12 @@ H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf)
H5MM_xfree(attr->data);
/* Look up the attribute for the object */
- if((idx=H5A_get_index(&(attr->ent),attr->name))<0)
+ if((idx=H5A_get_index(&(attr->ent),attr->name,dxpl_id))<0)
HGOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "attribute not found");
/* Modify the attribute data */
attr->data=tconv_buf; /* Set the data pointer temporarily */
- if (H5O_modify(&(attr->ent), H5O_ATTR, idx, 0, 1, attr) < 0)
+ if (H5O_modify(&(attr->ent), H5O_ATTR, idx, 0, 1, attr, dxpl_id) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL,
"unable to update attribute header messages");
@@ -709,7 +711,7 @@ H5Aread(hid_t attr_id, hid_t type_id, void *buf)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null attribute buffer");
/* Go write the actual data to the attribute */
- if ((ret_value=H5A_read(attr,mem_type,buf))<0)
+ if ((ret_value=H5A_read(attr,mem_type,buf,H5AC_dxpl_id))<0)
HGOTO_ERROR(H5E_ATTR, H5E_READERROR, FAIL, "unable to read attribute");
done:
@@ -736,7 +738,7 @@ done:
This function reads a complete attribute from disk.
--------------------------------------------------------------------------*/
static herr_t
-H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf)
+H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id)
{
uint8_t *tconv_buf = NULL; /* data type conv buffer*/
uint8_t *bkg_buf = NULL; /* background buffer */
@@ -778,7 +780,7 @@ H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf)
/* Convert memory buffer into disk buffer */
/* Set up type conversion function */
- if (NULL == (tpath = H5T_path_find(attr->dt, mem_type, NULL, NULL))) {
+ if (NULL == (tpath = H5T_path_find(attr->dt, mem_type, NULL, NULL, dxpl_id))) {
HGOTO_ERROR(H5E_ATTR, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types");
} else if (!H5T_IS_NOOP(tpath)) {
if ((src_id = H5I_register(H5I_DATATYPE, H5T_copy(attr->dt, H5T_COPY_ALL)))<0 ||
@@ -787,7 +789,7 @@ H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf)
}
/* Perform data type conversion. */
- if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, 0, tconv_buf, bkg_buf, H5P_DATASET_XFER_DEFAULT)<0)
+ if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, 0, tconv_buf, bkg_buf, dxpl_id)<0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "data type conversion failed");
/* Copy the converted data into the user's buffer */
@@ -1045,17 +1047,16 @@ done:
*
*-------------------------------------------------------------------------
*/
-hsize_t
+static hsize_t
H5A_get_storage_size(H5A_t *attr)
{
hsize_t ret_value; /* Return value */
- FUNC_ENTER_NOAPI(H5A_get_storage_size, 0);
+ FUNC_ENTER_NOINIT(H5A_get_storage_size);
/* Set return value */
ret_value = attr->data_size;
-done:
FUNC_LEAVE_NOAPI(ret_value);
}
@@ -1112,7 +1113,7 @@ H5Aget_num_attrs(hid_t loc_id)
}
/* Look up the attribute for the object */
- ret_value=H5O_count(ent, H5O_ATTR);
+ ret_value=H5O_count(ent, H5O_ATTR, H5AC_dxpl_id);
done:
FUNC_LEAVE_API(ret_value);
@@ -1153,7 +1154,7 @@ H5Arename(hid_t loc_id, const char *old_name, const char *new_name)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
/* Call private function */
- ret_value = H5A_rename(ent, old_name, new_name);
+ ret_value = H5A_rename(ent, old_name, new_name, H5AC_dxpl_id);
done:
FUNC_LEAVE_API(ret_value);
@@ -1176,14 +1177,14 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name)
+static herr_t
+H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name, hid_t dxpl_id)
{
int seq, idx=FAIL; /* Index of attribute being querried */
H5A_t *found_attr; /* Attribute with OLD_NAME */
herr_t ret_value=SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(H5A_rename, FAIL);
+ FUNC_ENTER_NOINIT(H5A_rename);
/* Check arguments */
assert(ent);
@@ -1196,7 +1197,7 @@ H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name)
/* Read in the existing attributes to check for duplicates */
seq=0;
- while(H5O_read(ent, H5O_ATTR, seq, found_attr)!=NULL) {
+ while(H5O_read(ent, H5O_ATTR, seq, found_attr, dxpl_id)!=NULL) {
/*
* Compare found attribute name.
*/
@@ -1223,7 +1224,7 @@ H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name)
found_attr->initialized=TRUE;
/* Modify the attribute message */
- if (H5O_modify(ent, H5O_ATTR, idx, 0, 1, found_attr) < 0)
+ if (H5O_modify(ent, H5O_ATTR, idx, 0, 1, found_attr, dxpl_id) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to update attribute header messages");
/* Close the attribute */
@@ -1302,8 +1303,8 @@ H5Aiterate(hid_t loc_id, unsigned *attr_num, H5A_operator_t op, void *op_data)
* reasonable.
*/
idx = attr_num ? (int)*attr_num : 0;
- if(idx<H5O_count(ent, H5O_ATTR)) {
- while(H5O_read(ent, H5O_ATTR, idx++, &found_attr)!=NULL) {
+ if(idx<H5O_count(ent, H5O_ATTR, H5AC_dxpl_id)) {
+ while(H5O_read(ent, H5O_ATTR, idx++, &found_attr, H5AC_dxpl_id)!=NULL) {
/*
* Compare found attribute name to new attribute name reject
* creation if names are the same.
@@ -1371,7 +1372,7 @@ H5Adelete(hid_t loc_id, const char *name)
/* Look up the attribute for the object */
idx=0;
- while(H5O_read(ent, H5O_ATTR, idx, &found_attr)!=NULL) {
+ while(H5O_read(ent, H5O_ATTR, idx, &found_attr, H5AC_dxpl_id)!=NULL) {
/*
* Compare found attribute name to new attribute name reject
* creation if names are the same.
@@ -1389,7 +1390,7 @@ H5Adelete(hid_t loc_id, const char *name)
HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "attribute not found");
/* Delete the attribute from the location */
- if ((ret_value=H5O_remove(ent, H5O_ATTR, found)) < 0)
+ if ((ret_value=H5O_remove(ent, H5O_ATTR, found, H5AC_dxpl_id)) < 0)
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute header message");
done:
@@ -1528,7 +1529,7 @@ H5A_close(H5A_t *attr)
HGOTO_ERROR(H5E_ATTR, H5E_NOSPACE, FAIL, "memory allocation failed for attribute fill-value");
/* Go write the fill data to the attribute */
- if (H5A_write(attr,attr->dt,tmp_buf)<0)
+ if (H5A_write(attr,attr->dt,tmp_buf,H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_ATTR, H5E_WRITEERROR, FAIL, "unable to write attribute");
/* Free temporary buffer */
diff --git a/src/H5AC.c b/src/H5AC.c
index 6da9b0b..67b88c6 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -28,6 +28,7 @@
#include "H5private.h"
#include "H5ACprivate.h"
+#include "H5Dprivate.h" /* Dataset functions */
#include "H5Eprivate.h"
#include "H5Fpkg.h"
#include "H5FLprivate.h" /*Free Lists */
@@ -36,10 +37,11 @@
#include "H5Pprivate.h" /* Property lists */
/*
- * Sorting the cache by address before flushing is sometimes faster
- * than flushing in cache order.
+ * The MPIO & MPIPOSIX drivers are needed because there are places where we
+ * check for the parallel I/O transfer mode.
*/
-#define H5AC_SORT_BY_ADDR
+#include "H5FDmpio.h"
+#include "H5FDmpiposix.h"
/*
* Private file-scope variables.
@@ -51,12 +53,22 @@ static int interface_initialize_g = 0;
#define INTERFACE_INIT H5AC_init_interface
static herr_t H5AC_init_interface(void);
-/* Dataset transfer property list for flush calls */
-static hid_t H5AC_dxpl_id=(-1);
+/* Default dataset transfer property list for metadata I/O calls */
+/* (Collective set, "block before metadata write" set and "library internal" set) */
+/* (Global variable definition, declaration is in H5ACprivate.h also) */
+hid_t H5AC_dxpl_id=(-1);
+
+/* Private dataset transfer property list for metadata I/O calls */
+/* (Collective set and "library internal" set) */
+/* (Static variable definition) */
+static hid_t H5AC_noblock_dxpl_id=(-1);
+
+/* Dataset transfer property list for independent metadata I/O calls */
+/* (just "library internal" set - i.e. independent transfer mode) */
+/* (Global variable definition, declaration is in H5ACprivate.h also) */
+hid_t H5AC_ind_dxpl_id=(-1);
-#ifdef H5AC_SORT_BY_ADDR
static H5AC_t *current_cache_g = NULL; /*for sorting */
-#endif
/* Declare a free list to manage the H5AC_t struct */
H5FL_DEFINE_STATIC(H5AC_t);
@@ -74,6 +86,35 @@ H5FL_ARR_DEFINE_STATIC(H5AC_prot_t,-1);
/*-------------------------------------------------------------------------
+ * Function: H5AC_init
+ *
+ * Purpose: Initialize the interface from some other layer.
+ *
+ * Return: Success: non-negative
+ *
+ * Failure: negative
+ *
+ * Programmer: Quincey Koziol
+ * Saturday, January 18, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_init(void)
+{
+ herr_t ret_value=SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5AC_init, FAIL);
+ /* FUNC_ENTER() does all the work */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
* Function: H5AC_init_interface
*
* Purpose: Initialize interface-specific information
@@ -93,7 +134,9 @@ H5AC_init_interface(void)
H5P_genclass_t *xfer_pclass; /* Dataset transfer property list class object */
#ifdef H5_HAVE_PARALLEL
H5P_genplist_t *xfer_plist; /* Dataset transfer property list object */
- unsigned block_before_meta_write=1; /* Custom value for "block before meta write" property */
+ unsigned block_before_meta_write; /* "block before meta write" property value */
+ unsigned library_internal=1; /* "library internal" property value */
+ H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
#endif /* H5_HAVE_PARALLEL */
herr_t ret_value=SUCCEED; /* Return value */
@@ -106,7 +149,7 @@ H5AC_init_interface(void)
if (NULL == (xfer_pclass = H5I_object(H5P_CLS_DATASET_XFER_g)))
HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get property list class");
- /* Create a new dataset transfer property list */
+ /* Get an ID for the blocking, collective H5AC dxpl */
if ((H5AC_dxpl_id=H5P_create_id(xfer_pclass)) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list");
@@ -116,8 +159,66 @@ H5AC_init_interface(void)
HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object");
/* Insert 'block before metadata write' property */
+ block_before_meta_write=1;
if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property");
+
+ /* Insert 'library internal' property */
+ if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property");
+
+ /* Set the transfer mode */
+ xfer_mode=H5FD_MPIO_COLLECTIVE;
+ if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+#endif /* H5_HAVE_PARALLEL */
+
+ /* Get an ID for the non-blocking, collective H5AC dxpl */
+ if ((H5AC_noblock_dxpl_id=H5P_create_id(xfer_pclass)) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list");
+
+#ifdef H5_HAVE_PARALLEL
+ /* Get the property list object */
+ if (NULL == (xfer_plist = H5I_object(H5AC_noblock_dxpl_id)))
+ HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object");
+
+ /* Insert 'block before metadata write' property */
+ block_before_meta_write=0;
+ if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property");
+
+ /* Insert 'library internal' property */
+ if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property");
+
+ /* Set the transfer mode */
+ xfer_mode=H5FD_MPIO_COLLECTIVE;
+ if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+#endif /* H5_HAVE_PARALLEL */
+
+ /* Get an ID for the non-blocking, independent H5AC dxpl */
+ if ((H5AC_ind_dxpl_id=H5P_create_id(xfer_pclass)) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list");
+
+#ifdef H5_HAVE_PARALLEL
+ /* Get the property list object */
+ if (NULL == (xfer_plist = H5I_object(H5AC_ind_dxpl_id)))
+ HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object");
+
+ /* Insert 'block before metadata write' property */
+ block_before_meta_write=0;
+ if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property");
+
+ /* Insert 'library internal' property */
+ if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property");
+
+ /* Set the transfer mode */
+ xfer_mode=H5FD_MPIO_INDEPENDENT;
+ if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
#endif /* H5_HAVE_PARALLEL */
done:
@@ -150,16 +251,20 @@ H5AC_term_interface(void)
FUNC_ENTER_NOINIT(H5AC_term_interface);
if (interface_initialize_g) {
- if(H5AC_dxpl_id>0) {
+ if(H5AC_dxpl_id>0 || H5AC_noblock_dxpl_id>0 || H5AC_ind_dxpl_id>0) {
/* Indicate more work to do */
n = 1; /* H5I */
/* Close H5AC dxpl */
- if (H5Pclose(H5AC_dxpl_id) < 0)
+ if (H5Pclose(H5AC_dxpl_id) < 0 ||
+ H5Pclose(H5AC_noblock_dxpl_id) < 0 ||
+ H5Pclose(H5AC_ind_dxpl_id) < 0)
H5E_clear(); /*ignore the error*/
else {
- /* Reset static ID */
+ /* Reset static IDs */
H5AC_dxpl_id=(-1);
+ H5AC_noblock_dxpl_id=(-1);
+ H5AC_ind_dxpl_id=(-1);
/* Reset interface initialization flag */
interface_initialize_g = 0;
@@ -209,8 +314,9 @@ H5AC_create(H5F_t *f, int size_hint)
if (NULL==(f->shared->cache = cache = H5FL_CALLOC(H5AC_t)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
cache->nslots = size_hint;
- cache->slot = H5FL_ARR_CALLOC(H5AC_info_ptr_t,cache->nslots);
- if (NULL==cache->slot)
+ if (NULL==( cache->slot = H5FL_ARR_CALLOC(H5AC_info_ptr_t,cache->nslots)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+ if (NULL==( cache->dslot = H5FL_ARR_CALLOC(H5AC_info_ptr_t,cache->nslots)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
#ifdef H5AC_DEBUG
if ((cache->prot = H5FL_ARR_CALLOC(H5AC_prot_t,cache->nslots))==NULL)
@@ -223,6 +329,8 @@ H5AC_create(H5F_t *f, int size_hint)
done:
if(ret_value<0) {
if(cache!=NULL) {
+ if(cache->dslot !=NULL)
+ cache->dslot = H5FL_ARR_FREE (H5AC_info_ptr_t,cache->dslot);
if(cache->slot !=NULL)
cache->slot = H5FL_ARR_FREE (H5AC_info_ptr_t,cache->slot);
#ifdef H5AC_DEBUG
@@ -255,7 +363,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5AC_dest(H5F_t *f)
+H5AC_dest(H5F_t *f, hid_t dxpl_id)
{
H5AC_t *cache = NULL;
herr_t ret_value=SUCCEED; /* Return value */
@@ -266,7 +374,7 @@ H5AC_dest(H5F_t *f)
assert(f->shared->cache);
cache = f->shared->cache;
- if (H5AC_flush(f, NULL, HADDR_UNDEF, TRUE) < 0)
+ if (H5AC_flush(f, dxpl_id, NULL, HADDR_UNDEF, TRUE) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache");
#ifdef H5AC_DEBUG
@@ -281,6 +389,7 @@ H5AC_dest(H5F_t *f)
}
#endif
+ cache->dslot = H5FL_ARR_FREE(H5AC_info_ptr_t,cache->dslot);
cache->slot = H5FL_ARR_FREE(H5AC_info_ptr_t,cache->slot);
cache->nslots = 0;
f->shared->cache = cache = H5FL_FREE(H5AC_t,cache);
@@ -291,7 +400,7 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5AC_find_f
+ * Function: H5AC_find
*
* Purpose: Given an object type and the address at which that object
* is located in the file, return a pointer to the object.
@@ -336,18 +445,20 @@ done:
*-------------------------------------------------------------------------
*/
void *
-H5AC_find_f(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
+H5AC_find(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
const void *udata1, void *udata2)
{
unsigned idx;
- herr_t status;
void *thing;
H5AC_flush_func_t flush;
H5AC_info_t **info;
+#ifdef H5_HAVE_PARALLEL
+ H5AC_info_t **dinfo = NULL;
+#endif /* H5_HAVE_PARALLEL */
H5AC_t *cache;
void *ret_value; /* Return value */
- FUNC_ENTER_NOAPI(H5AC_find_f, NULL);
+ FUNC_ENTER_NOAPI(H5AC_find, NULL);
assert(f);
assert(f->shared->cache);
@@ -356,17 +467,55 @@ H5AC_find_f(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
assert(type->flush);
assert(H5F_addr_defined(addr));
- /* Get local copies of information */
+ /* Get local pointers to the file's cache information */
idx = H5AC_HASH(f, addr);
cache = f->shared->cache;
info = cache->slot + idx;
+#ifdef H5_HAVE_PARALLEL
+ /* If MPIO or MPIPOSIX is used, do special parallel I/O actions */
+ if(IS_H5FD_MPIO(f) || IS_H5FD_MPIPOSIX(f)) {
+ H5AC_dest_func_t dest;
+
+ /* Get local pointer to file's dirty cache information */
+ dinfo = cache->dslot + idx;
+
+ /* Check if the cache has 'held' information for this cache slot */
+ if (*dinfo) {
+ /* Sanity check that the 'clean' item is really clean */
+ assert(*info);
+ assert((*info)->dirty==0);
+
+ /* Destroy 'current' information */
+ dest = (*info)->type->dest;
+ if ((dest)(f, (*info))<0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, NULL, "unable to free cached object");
+
+ /* Restore 'held' information back to 'current' information */
+ (*info)=(*dinfo);
+
+ /* Clear 'held' information */
+ (*dinfo)=NULL;
+
+#ifdef H5AC_DEBUG
+ cache->diagnostics[type->id].nrestores++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
+
/*
* Return right away if the item is in the cache.
*/
- if ((*info) && H5F_addr_eq(addr,(*info)->addr)) {
+ if ((*info) && H5F_addr_eq(addr,(*info)->addr)
+#ifdef H5AC_DEBUG
+ && (*info)->type==type
+#endif /* H5AC_DEBUG */
+ ) {
+#ifndef H5AC_DEBUG
/* Sanity check that the object in the cache is the correct type */
assert((*info)->type==type);
+#endif /* H5AC_DEBUG */
#ifdef H5AC_DEBUG
cache->diagnostics[type->id].nhits++;
@@ -398,11 +547,46 @@ H5AC_find_f(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
* Load a new thing. If it can't be loaded, then return an error
* without preempting anything.
*/
- if (NULL == (thing = (type->load)(f, H5P_DATASET_XFER_DEFAULT, addr, udata1, udata2)))
+ if (NULL == (thing = (type->load)(f, dxpl_id, addr, udata1, udata2)))
HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "unable to load object");
+#ifdef H5_HAVE_PARALLEL
+ /* If MPIO or MPIPOSIX is used, do special parallel I/O actions */
+ if(IS_H5FD_MPIO(f) || IS_H5FD_MPIPOSIX(f)) {
+ H5P_genplist_t *dxpl; /* Dataset transfer property list */
+ H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
+
+ /* Get the dataset transfer property list */
+ if (NULL == (dxpl = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a dataset creation property list");
+
+ /* Get the transfer mode property */
+ if(H5P_get(dxpl, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve xfer mode");
+
+ /* Make certain there is no 'held' info for this slot */
+ assert((*dinfo)==NULL);
+
+ /* Must be using collective I/O to flush metadata in parallel */
+ if(xfer_mode==H5FD_MPIO_INDEPENDENT) {
+ /* Check if there is dirty metadata in this slot */
+ if((*info) && (*info)->dirty) {
+ /* 'Hold' the current metadata for later */
+ (*dinfo)=(*info);
+
+ /* Reset the 'current' metadata, so it doesn't get flushed */
+ (*info)=NULL;
+
+#ifdef H5AC_DEBUG
+ cache->diagnostics[(*dinfo)->type->id].nholds++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ } /* end else */
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
+
/*
- * Free the previous cache entry if there is one.
+ * Flush & destroy the previous cache entry if there is one.
*/
if (*info) {
#ifdef H5AC_DEBUG
@@ -410,20 +594,19 @@ H5AC_find_f(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
#endif /* H5AC_DEBUG */
flush = (*info)->type->flush;
- status = (flush)(f, H5AC_dxpl_id, TRUE, (*info)->addr, (*info));
- if (status < 0) {
+ if ( (flush)(f, dxpl_id, TRUE, (*info)->addr, (*info)) < 0) {
/*
* The old thing could not be removed from the stack.
* Release the new thing and fail.
*/
- if ((type->flush)(f, H5AC_dxpl_id, TRUE, addr, thing) < 0)
- HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, "unable to flush just-loaded object");
+ if ((type->dest)(f, thing) < 0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, "unable to destroy just-loaded object");
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, NULL, "unable to flush existing cached object");
}
#ifdef H5AC_DEBUG
cache->diagnostics[type_id].nflushes++;
#endif /* H5AC_DEBUG */
- }
+ } /* end if */
/*
* Make the cache point to the new thing.
@@ -431,6 +614,7 @@ H5AC_find_f(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
(*info)=thing;
(*info)->type = type;
(*info)->addr = addr;
+ assert((*info)->dirty==0); /* Should be clean after being loaded */
/* Set the return value */
ret_value=thing;
@@ -458,7 +642,6 @@ done:
*
*-------------------------------------------------------------------------
*/
-#ifdef H5AC_SORT_BY_ADDR
static int
H5AC_compare(const void *_a, const void *_b)
{
@@ -490,7 +673,6 @@ H5AC_compare(const void *_a, const void *_b)
FUNC_LEAVE_NOAPI(ret_value);
}
-#endif
/*-------------------------------------------------------------------------
@@ -520,15 +702,13 @@ H5AC_compare(const void *_a, const void *_b)
*-------------------------------------------------------------------------
*/
herr_t
-H5AC_flush(H5F_t *f, const H5AC_class_t *type, haddr_t addr, hbool_t destroy)
+H5AC_flush(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr, hbool_t destroy)
{
unsigned i;
herr_t status;
H5AC_flush_func_t flush=NULL;
H5AC_info_t **info;
-#ifdef H5AC_SORT_BY_ADDR
int *map = NULL;
-#endif /* H5AC_SORT_BY_ADDR */
unsigned nslots;
H5AC_t *cache;
herr_t ret_value=SUCCEED; /* Return value */
@@ -544,42 +724,92 @@ H5AC_flush(H5F_t *f, const H5AC_class_t *type, haddr_t addr, hbool_t destroy)
if (!H5F_addr_defined(addr)) {
unsigned first_flush=1; /* Indicate if this is the first flush */
-#ifdef H5AC_SORT_BY_ADDR
/*
* Sort the cache entries by address since flushing them in
- * ascending order by address may be much more efficient.
+ * ascending order by address is much more efficient.
*/
if (NULL==(map=H5FL_ARR_MALLOC(int,cache->nslots)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- for (i = nslots = 0; i < cache->nslots; i++) {
- if (cache->slot[i]!=NULL)
- map[nslots++] = i;
- }
+#ifdef H5_HAVE_PARALLEL
+ /* If MPIO or MPIPOSIX is used, do special parallel I/O actions */
+ if(IS_H5FD_MPIO(f) || IS_H5FD_MPIPOSIX(f)) {
+ H5AC_info_t **dinfo;
+ H5AC_subid_t type_id;
+#ifndef NDEBUG
+ H5P_genplist_t *dxpl; /* Dataset transfer property list */
+ H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
+
+ /* Get the dataset transfer property list */
+ if (NULL == (dxpl = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list");
+
+ /* Get the transfer mode property */
+ if(H5P_get(dxpl, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve xfer mode");
+
+ /* Sanity check transfer mode */
+ assert(xfer_mode==H5FD_MPIO_COLLECTIVE);
+#endif /* NDEBUG */
+
+ /* Create the mapping */
+ for (i = nslots = 0; i < cache->nslots; i++) {
+ info = cache->slot + i;
+ dinfo = cache->dslot + i;
+
+ /* Move dirty metadata from 'held' slots into 'regular' slots */
+ if((*dinfo)!=NULL) {
+ H5AC_dest_func_t dest;
+
+ /* Various sanity checks */
+ assert((*dinfo)->dirty);
+ assert((*info)!=NULL);
+ assert((*info)->dirty==0);
+
+ type_id=(*info)->type->id; /* Remember this for later */
+
+ /* Destroy 'current' information */
+ dest = (*info)->type->dest;
+ if ((dest)(f, (*info))<0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, NULL, "unable to free cached object");
+
+ /* Restore 'held' information back to 'current' information */
+ (*info)=(*dinfo);
+
+ /* Clear 'held' information */
+ (*dinfo)=NULL;
+
+#ifdef H5AC_DEBUG
+ cache->diagnostics[type_id].nrestores++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ if ((*info))
+ map[nslots++] = i;
+ } /* end for */
+ } /* end if */
+ else {
+#endif /* H5_HAVE_PARALLEL */
+ for (i = nslots = 0; i < cache->nslots; i++) {
+ if (cache->slot[i]!=NULL)
+ map[nslots++] = i;
+ }
+#ifdef H5_HAVE_PARALLEL
+ } /* end else */
+#endif /* H5_HAVE_PARALLEL */
assert(NULL == current_cache_g);
current_cache_g = cache;
HDqsort(map, nslots, sizeof(int), H5AC_compare);
current_cache_g = NULL;
-#ifdef NDEBUG
+#ifndef NDEBUG
for (i = 1; i < nslots; i++)
- assert(H5F_addr_lt(cache->slot[i - 1]->addr, cache->slot[i]->addr));
+ assert(H5F_addr_lt(cache->slot[map[i - 1]]->addr, cache->slot[map[i]]->addr));
#endif
-#else /* H5AC_SORT_BY_ADDR */
- nslots = cache->nslots;
-#endif /* H5AC_SORT_BY_ADDR */
/*
* Look at all cache entries.
*/
for (i = 0; i < nslots; i++) {
-#ifdef H5AC_SORT_BY_ADDR
info = cache->slot + map[i];
- if (NULL == (*info))
- break; /*the rest are empty */
-#else /* H5AC_SORT_BY_ADDR */
- info = cache->slot + i;
- if (NULL == (*info))
- continue;
-#endif /* H5AC_SORT_BY_ADDR */
+ assert(*info);
if (!type || type == (*info)->type) {
#ifdef H5AC_DEBUG
H5AC_subid_t type_id=(*info)->type->id; /* Remember this for later */
@@ -588,12 +818,12 @@ H5AC_flush(H5F_t *f, const H5AC_class_t *type, haddr_t addr, hbool_t destroy)
flush = (*info)->type->flush;
/* Only block for all the processes on the first piece of metadata */
- if(first_flush) {
- status = (flush)(f, H5AC_dxpl_id, destroy, (*info)->addr, (*info));
+ if(first_flush && (*info)->dirty) {
+ status = (flush)(f, dxpl_id, destroy, (*info)->addr, (*info));
first_flush=0;
} /* end if */
else
- status = (flush)(f, H5P_DATASET_XFER_DEFAULT, destroy, (*info)->addr, (*info));
+ status = (flush)(f, H5AC_noblock_dxpl_id, destroy, (*info)->addr, (*info));
if (status < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache");
@@ -613,32 +843,81 @@ H5AC_flush(H5F_t *f, const H5AC_class_t *type, haddr_t addr, hbool_t destroy)
HGOTO_ERROR(H5E_CACHE, H5E_PROTECT, FAIL, "cache has protected items");
} else {
i = H5AC_HASH(f, addr);
- if (cache->slot[i] && (!type || cache->slot[i]->type == type) &&
- H5F_addr_eq(addr,cache->slot[i]->addr)) {
+ info = cache->slot + i;
+#ifdef H5_HAVE_PARALLEL
+ /* If MPIO or MPIPOSIX is used, do special parallel I/O actions */
+ if(IS_H5FD_MPIO(f) || IS_H5FD_MPIPOSIX(f)) {
+ H5AC_info_t **dinfo;
+ H5AC_subid_t type_id;
+#ifndef NDEBUG
+ H5P_genplist_t *dxpl; /* Dataset transfer property list */
+ H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
+
+ /* Get the dataset transfer property list */
+ if (NULL == (dxpl = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list");
+
+ /* Get the transfer mode property */
+ if(H5P_get(dxpl, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve xfer mode");
+
+ /* Sanity check transfer mode */
+ assert(xfer_mode==H5FD_MPIO_COLLECTIVE);
+#endif /* NDEBUG */
+
+ dinfo = cache->dslot + i;
+
+ /* Restore dirty metadata from 'held' slot to 'current' slot */
+ if((*dinfo)!=NULL) {
+ H5AC_dest_func_t dest;
+
+ /* Various sanity checks */
+ assert((*dinfo)->dirty);
+ assert((*info)!=NULL);
+ assert((*info)->dirty==0);
+
+ type_id=(*info)->type->id; /* Remember this for later */
+
+ /* Destroy 'current' information */
+ dest = (*info)->type->dest;
+ if ((dest)(f, (*info))<0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, NULL, "unable to free cached object");
+
+ /* Restore 'held' information back to 'current' information */
+ (*info)=(*dinfo);
+
+ /* Clear 'held' information */
+ (*dinfo)=NULL;
+
#ifdef H5AC_DEBUG
- H5AC_subid_t type_id=cache->slot[i]->type->id; /* Remember this for later */
+ cache->diagnostics[type_id].nrestores++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
+ if ((*info) && (!type || (*info)->type == type) &&
+ H5F_addr_eq((*info)->addr, addr)) {
+#ifdef H5AC_DEBUG
+ H5AC_subid_t type_id=(*info)->type->id; /* Remember this for later */
#endif /* H5AC_DEBUG */
/*
* Flush just this entry.
*/
- flush = cache->slot[i]->type->flush;
- if ((flush)(f, H5AC_dxpl_id, destroy, cache->slot[i]->addr,
- cache->slot[i]) < 0)
+ flush = (*info)->type->flush;
+ if((flush)(f, dxpl_id, destroy, (*info)->addr, (*info)) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush object");
#ifdef H5AC_DEBUG
cache->diagnostics[type_id].nflushes++;
#endif /* H5AC_DEBUG */
if (destroy)
- cache->slot[i]= NULL;
- }
- }
+ (*info)= NULL;
+ } /* end if */
+ } /* end else */
done:
-#ifdef H5AC_SORT_BY_ADDR
if(map!=NULL)
map = H5FL_ARR_FREE(int,map);
-#endif /* H5AC_SORT_BY_ADDR */
FUNC_LEAVE_NOAPI(ret_value);
}
@@ -666,7 +945,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5AC_set(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing)
+H5AC_set(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr, void *thing)
{
unsigned idx;
H5AC_flush_func_t flush;
@@ -699,6 +978,77 @@ H5AC_set(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing)
}
#endif
+#ifdef H5_HAVE_PARALLEL
+ /* If MPIO or MPIPOSIX is used, do special parallel I/O actions */
+ if(IS_H5FD_MPIO(f) || IS_H5FD_MPIPOSIX(f)) {
+ H5AC_info_t **dinfo;
+ H5AC_subid_t type_id;
+ H5P_genplist_t *dxpl; /* Dataset transfer property list */
+ H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
+
+ /* Get the dataset transfer property list */
+ if (NULL == (dxpl = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list");
+
+ /* Get the transfer mode property */
+ if(H5P_get(dxpl, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve xfer mode");
+
+ /* Get pointer to 'held' information */
+ dinfo = cache->dslot + idx;
+
+ /* Sanity check transfer mode */
+ if(xfer_mode==H5FD_MPIO_COLLECTIVE) {
+ /* Check for dirty metadata */
+ if(*dinfo) {
+ H5AC_dest_func_t dest;
+
+ /* Various sanity checks */
+ assert((*dinfo)->dirty);
+ assert((*info)!=NULL);
+ assert((*info)->dirty==0);
+
+ type_id=(*info)->type->id; /* Remember this for later */
+
+ /* Destroy 'current' information */
+ dest = (*info)->type->dest;
+ if ((dest)(f, (*info))<0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, NULL, "unable to free cached object");
+
+ /* Restore 'held' information back to 'current' information */
+ (*info)=(*dinfo);
+
+ /* Clear 'held' information */
+ (*dinfo)=NULL;
+
+#ifdef H5AC_DEBUG
+ cache->diagnostics[type_id].nrestores++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ } /* end if */
+ else {
+ /* Sanity check */
+ assert((*dinfo)==NULL);
+ assert(xfer_mode==H5FD_MPIO_INDEPENDENT);
+
+ /* Make certain there will be no write of dirty metadata */
+ if((*info) && (*info)->dirty) {
+ /* Sanity check new item */
+ assert(((H5AC_info_t*)thing)->dirty==0);
+
+ /* 'Hold' the current metadata for later */
+ (*dinfo)=(*info);
+
+ /* Reset the 'current' metadata, so it doesn't get flushed */
+ (*info)=NULL;
+
+#ifdef H5AC_DEBUG
+ cache->diagnostics[(*dinfo)->type->id].nholds++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ } /* end else */
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
/* Flush any object already in cache slot */
if ((*info)) {
@@ -707,13 +1057,14 @@ H5AC_set(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing)
#endif /* H5AC_DEBUG */
flush = (*info)->type->flush;
- if ((flush)(f, H5AC_dxpl_id, TRUE, (*info)->addr, (*info)) < 0)
+ if ((flush)(f, dxpl_id, TRUE, (*info)->addr, (*info)) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush object");
#ifdef H5AC_DEBUG
cache->diagnostics[type_id].nflushes++;
#endif /* H5AC_DEBUG */
- }
+ } /* end if */
+ /* Cache this item */
(*info)=thing;
(*info)->type = type;
(*info)->addr = addr;
@@ -748,12 +1099,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5AC_rename(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr,
+H5AC_rename(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t old_addr,
haddr_t new_addr)
{
unsigned old_idx, new_idx;
H5AC_flush_func_t flush;
H5AC_t *cache;
+ H5AC_info_t **new_info = NULL;
+ H5AC_info_t **old_info = NULL;
herr_t ret_value=SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5AC_rename, FAIL);
@@ -766,6 +1119,8 @@ H5AC_rename(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr,
old_idx = H5AC_HASH(f, old_addr);
new_idx = H5AC_HASH(f, new_addr);
cache = f->shared->cache;
+ new_info = cache->slot + new_idx;
+ old_info = cache->slot + old_idx;
#ifdef H5AC_DEBUG
{
@@ -785,25 +1140,95 @@ H5AC_rename(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr,
* We don't need to do anything if the object isn't cached or if the
* new hash value is the same as the old one.
*/
- if (cache->slot[old_idx]->type != type ||
- H5F_addr_ne(cache->slot[old_idx]->addr, old_addr)) {
+ if (H5F_addr_ne((*old_info)->addr, old_addr) || (*old_info)->type!=type)
HGOTO_DONE(SUCCEED);
- }
if (old_idx == new_idx) {
- cache->slot[old_idx]->addr = new_addr;
+ (*old_info)->addr = new_addr;
HGOTO_DONE(SUCCEED);
}
+
+#ifdef H5_HAVE_PARALLEL
+ /* If MPIO or MPIPOSIX is used, do special parallel I/O actions */
+ if(IS_H5FD_MPIO(f) || IS_H5FD_MPIPOSIX(f)) {
+ H5AC_info_t **new_dinfo;
+ H5AC_subid_t type_id;
+ H5P_genplist_t *dxpl; /* Dataset transfer property list */
+ H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
+
+ /* Get the dataset transfer property list */
+ if (NULL == (dxpl = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list");
+
+ /* Get the transfer mode property */
+ if(H5P_get(dxpl, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve xfer mode");
+
+ /* Get pointer to new 'held' information */
+ new_dinfo = cache->dslot + new_idx;
+
+ /* Sanity check transfer mode */
+ if(xfer_mode==H5FD_MPIO_COLLECTIVE) {
+ /* Check for dirty metadata */
+ if(*new_dinfo) {
+ H5AC_dest_func_t dest;
+
+ /* Various sanity checks */
+ assert((*new_dinfo)->dirty);
+ assert((*new_info)!=NULL);
+ assert((*new_info)->dirty==0);
+
+ type_id=(*new_info)->type->id; /* Remember this for later */
+
+ /* Destroy 'current' information */
+ dest = (*new_info)->type->dest;
+ if ((dest)(f, (*new_info))<0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, NULL, "unable to free cached object");
+
+ /* Restore 'held' information back to 'current' information */
+ (*new_info)=(*new_dinfo);
+
+ /* Clear 'held' information */
+ (*new_dinfo)=NULL;
+
+#ifdef H5AC_DEBUG
+ cache->diagnostics[type_id].nrestores++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ } /* end if */
+ else {
+ /* Sanity check that there will be no write of dirty metadata */
+ assert((*new_dinfo)==NULL);
+ assert(xfer_mode==H5FD_MPIO_INDEPENDENT);
+
+ /* Make certain there will be no write of dirty metadata */
+ if((*new_info) && (*new_info)->dirty) {
+ /* Sanity check that we won't put two pieces of dirty metadata in same cache location */
+ assert((*old_info)->dirty==0);
+
+ /* 'Hold' the current metadata for later */
+ (*new_dinfo)=(*new_info);
+
+ /* Reset the 'current' metadata, so it doesn't get flushed */
+ (*new_info)=NULL;
+
+#ifdef H5AC_DEBUG
+ cache->diagnostics[(*new_dinfo)->type->id].nholds++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ } /* end else */
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
+
/*
* Free the item from the destination cache line.
*/
- if (cache->slot[new_idx]) {
+ if (*new_info) {
#ifdef H5AC_DEBUG
- H5AC_subid_t type_id=cache->slot[new_idx]->type->id; /* Remember this for later */
+ H5AC_subid_t type_id=(*new_info)->type->id; /* Remember this for later */
#endif /* H5AC_DEBUG */
- flush = cache->slot[new_idx]->type->flush;
- if ((flush)(f, H5AC_dxpl_id, TRUE, cache->slot[new_idx]->addr,
- cache->slot[new_idx]) < 0)
+ flush = (*new_info)->type->flush;
+ if ( (flush)(f, dxpl_id, TRUE, (*new_info)->addr, (*new_info)) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush object");
#ifdef H5AC_DEBUG
cache->diagnostics[type_id].nflushes++;
@@ -813,10 +1238,45 @@ H5AC_rename(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr,
/*
* Move the source to the destination (it might not be cached)
*/
- cache->slot[new_idx]= cache->slot[old_idx];
- cache->slot[new_idx]->type = cache->slot[old_idx]->type;
- cache->slot[new_idx]->addr = new_addr;
- cache->slot[old_idx]= NULL;
+ (*new_info)= (*old_info);
+ (*new_info)->addr = new_addr;
+
+#ifdef H5_HAVE_PARALLEL
+ /* If MPIO or MPIPOSIX is used, do special parallel I/O actions */
+ if(IS_H5FD_MPIO(f) || IS_H5FD_MPIPOSIX(f)) {
+ H5AC_info_t **old_dinfo;
+ H5AC_subid_t type_id;
+
+ /* Get pointer to new 'held' information */
+ old_dinfo = cache->dslot + old_idx;
+
+ /* Check for 'held' metadata in old location & restore it, if so */
+ if(*old_dinfo) {
+ /* Sanity check */
+ assert((*old_dinfo)->dirty);
+
+ type_id=(*old_info)->type->id; /* Remember this for later */
+
+ /* Restore 'held' information back to 'current' information */
+ (*old_info)=(*old_dinfo);
+
+ /* Clear 'held' information */
+ (*old_dinfo)=NULL;
+
+#ifdef H5AC_DEBUG
+ cache->diagnostics[type_id].nrestores++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ else
+ (*old_info)= NULL;
+ } /* end if */
+ else {
+#endif /* H5_HAVE_PARALLEL */
+
+ (*old_info)= NULL;
+#ifdef H5_HAVE_PARALLEL
+ } /* end else */
+#endif /* H5_HAVE_PARALLEL */
done:
FUNC_LEAVE_NOAPI(ret_value);
@@ -851,19 +1311,19 @@ done:
*-------------------------------------------------------------------------
*/
void *
-H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
+H5AC_protect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
const void *udata1, void *udata2)
{
int idx;
- void *thing;
+ void *thing=NULL;
H5AC_t *cache;
H5AC_info_t **info;
void *ret_value; /* Return value */
#ifdef H5AC_DEBUG
H5AC_prot_t *prot = NULL;
-
static int ncalls = 0;
+
if (0 == ncalls++) {
if (H5DEBUG(AC)) {
fprintf(H5DEBUG(AC), "H5AC: debugging cache (expensive)\n");
@@ -889,43 +1349,120 @@ H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
prot = cache->prot + idx;
#endif /* H5AC_DEBUG */
- if ((*info) && H5F_addr_eq(addr,(*info)->addr)) {
- /* Sanity check that the object in the cache is the correct type */
- assert((*info)->type==type);
+#ifdef H5_HAVE_PARALLEL
+ /* If MPIO or MPIPOSIX is used, do special parallel I/O actions */
+ if(IS_H5FD_MPIO(f) || IS_H5FD_MPIPOSIX(f)) {
+ H5AC_info_t **dinfo;
+
+ /* Get pointer to new 'held' information */
+ dinfo = cache->dslot + idx;
+
+ /* Check for 'held' metadata in location & handle it */
+ if(*dinfo) {
+ /* Sanity checks */
+ assert((*dinfo)->dirty);
+ assert((*info));
+ assert((*info)->dirty==0);
+ assert((*dinfo)->addr!=(*info)->addr);
+
+ /* Is 'held' metadata the metadata we are looking for? */
+ if (H5F_addr_eq((*dinfo)->addr, addr)
+#ifdef H5AC_DEBUG
+ && (*dinfo)->type==type
+#endif /* H5AC_DEBUG */
+ ) {
+#ifndef H5AC_DEBUG
+ /* Sanity check that the object in the cache is the correct type */
+ assert((*dinfo)->type==type);
+#endif /* H5AC_DEBUG */
+ /*
+ * The object is already cached; simply remove it from the cache.
+ */
+ thing = (*dinfo);
+ (*dinfo)->type = NULL;
+ (*dinfo)->addr = HADDR_UNDEF;
+ (*dinfo)= NULL;
+#ifdef H5AC_DEBUG
+ cache->diagnostics[(*dinfo)->type->id].nhits++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ /* 'held' metadata isn't what we are looking for, but check for 'current' metadata */
+ else {
+ if(H5F_addr_eq((*info)->addr, addr)
+#ifdef H5AC_DEBUG
+ && (*info)->type==type
+#endif /* H5AC_DEBUG */
+ ) {
+#ifndef H5AC_DEBUG
+ /* Sanity check that the object in the cache is the correct type */
+ assert((*info)->type==type);
+#endif /* H5AC_DEBUG */
+ /*
+ * The object is already cached; remove it from the cache.
+ * and bring the 'held' object into the 'regular' information
+ */
+ thing = (*info);
+ (*info)->type = NULL;
+ (*info)->addr = HADDR_UNDEF;
+ (*info)= (*dinfo);
+ (*dinfo)= NULL;
+#ifdef H5AC_DEBUG
+ cache->diagnostics[(*info)->type->id].nhits++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ } /* end else */
+ } /* end if */
+ } /* end if */
- /*
- * The object is already cached; simply remove it from the cache.
- */
+ /* Check if we've already found the object to protect */
+ if(thing==NULL) {
+#endif /* H5_HAVE_PARALLEL */
+ if ((*info) && H5F_addr_eq(addr,(*info)->addr)
#ifdef H5AC_DEBUG
- cache->diagnostics[(*info)->type->id].nhits++;
+ && (*info)->type==type
#endif /* H5AC_DEBUG */
- thing = (*info);
- (*info)->type = NULL;
- (*info)->addr = HADDR_UNDEF;
- (*info)= NULL;
- } else {
+ ) {
+#ifndef H5AC_DEBUG
+ /* Sanity check that the object in the cache is the correct type */
+ assert((*info)->type==type);
+#endif /* H5AC_DEBUG */
+
+ /*
+ * The object is already cached; simply remove it from the cache.
+ */
+ thing = (*info);
+ (*info)->type = NULL;
+ (*info)->addr = HADDR_UNDEF;
+ (*info)= NULL;
#ifdef H5AC_DEBUG
- /*
- * Check that the requested thing isn't protected, for protected things
- * can only be modified through the pointer already handed out by the
- * H5AC_protect() function.
- */
- int i;
+ cache->diagnostics[(*info)->type->id].nhits++;
+#endif /* H5AC_DEBUG */
+ } else {
+#ifdef H5AC_DEBUG
+ /*
+ * Check that the requested thing isn't protected, for protected things
+ * can only be modified through the pointer already handed out by the
+ * H5AC_protect() function.
+ */
+ int i;
- for (i = 0; i < prot->nprots; i++)
- assert(H5F_addr_ne(addr, prot->slot[i]->addr));
+ for (i = 0; i < prot->nprots; i++)
+ assert(H5F_addr_ne(addr, prot->slot[i]->addr));
#endif /* H5AC_DEBUG */
- /*
- * Load a new thing. If it can't be loaded, then return an error
- * without preempting anything.
- */
+ /*
+ * Load a new thing. If it can't be loaded, then return an error
+ * without preempting anything.
+ */
+ if (NULL == (thing = (type->load)(f, dxpl_id, addr, udata1, udata2)))
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "unable to load object");
#ifdef H5AC_DEBUG
- cache->diagnostics[type->id].nmisses++;
+ cache->diagnostics[type->id].nmisses++;
#endif /* H5AC_DEBUG */
- if (NULL == (thing = (type->load)(f, H5P_DATASET_XFER_DEFAULT, addr, udata1, udata2)))
- HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "unable to load object");
- }
+ }
+#ifdef H5_HAVE_PARALLEL
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
#ifdef H5AC_DEBUG
/*
@@ -934,8 +1471,8 @@ H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
*/
if (prot->nprots >= prot->aprots) {
size_t na = prot->aprots + 10;
- H5AC_info_t **x = H5MM_realloc(prot->slot,
- na * sizeof(H5AC_info_t *));
+ H5AC_info_t **x = H5MM_realloc(prot->slot, na * sizeof(H5AC_info_t *));
+
if (NULL==x)
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
prot->aprots = (int)na;
@@ -981,7 +1518,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5AC_unprotect(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing)
+H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr, void *thing)
{
unsigned idx;
H5AC_flush_func_t flush;
@@ -1004,6 +1541,78 @@ H5AC_unprotect(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing)
cache = f->shared->cache;
info = cache->slot + idx;
+#ifdef H5_HAVE_PARALLEL
+ /* If MPIO or MPIPOSIX is used, do special parallel I/O actions */
+ if(IS_H5FD_MPIO(f) || IS_H5FD_MPIPOSIX(f)) {
+ H5AC_info_t **dinfo;
+ H5AC_subid_t type_id;
+ H5P_genplist_t *dxpl; /* Dataset transfer property list */
+ H5FD_mpio_xfer_t xfer_mode; /* I/O transfer mode property value */
+
+ /* Get the dataset transfer property list */
+ if (NULL == (dxpl = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list");
+
+ /* Get the transfer mode property */
+ if(H5P_get(dxpl, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve xfer mode");
+
+ /* Get pointer to 'held' information */
+ dinfo = cache->dslot + idx;
+
+ /* Sanity check transfer mode */
+ if(xfer_mode==H5FD_MPIO_COLLECTIVE) {
+ /* Check for dirty metadata */
+ if(*dinfo) {
+ H5AC_dest_func_t dest;
+
+ /* Various sanity checks */
+ assert((*dinfo)->dirty);
+ assert((*info)!=NULL);
+ assert((*info)->dirty==0);
+
+ type_id=(*info)->type->id; /* Remember this for later */
+
+ /* Destroy 'current' information */
+ dest = (*info)->type->dest;
+ if ((dest)(f, (*info))<0)
+ HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "unable to free cached object");
+
+ /* Restore 'held' information back to 'current' information */
+ (*info)=(*dinfo);
+
+ /* Clear 'held' information */
+ (*dinfo)=NULL;
+
+#ifdef H5AC_DEBUG
+ cache->diagnostics[type_id].nrestores++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ } /* end if */
+ else {
+ /* Sanity check */
+ assert((*dinfo)==NULL);
+ assert(xfer_mode==H5FD_MPIO_INDEPENDENT);
+
+ /* Make certain there will be no write of dirty metadata */
+ if((*info) && (*info)->dirty) {
+ /* Sanity check new item */
+ assert(((H5AC_info_t*)thing)->dirty==0);
+
+ /* 'Hold' the current metadata for later */
+ (*dinfo)=(*info);
+
+ /* Reset the 'current' metadata, so it doesn't get flushed */
+ (*info)=NULL;
+
+#ifdef H5AC_DEBUG
+ cache->diagnostics[(*dinfo)->type->id].nholds++;
+#endif /* H5AC_DEBUG */
+ } /* end if */
+ } /* end else */
+ } /* end if */
+#endif /* H5_HAVE_PARALLEL */
+
/*
* Flush any object already in the cache at that location. It had
* better not be another copy of the protected object.
@@ -1015,12 +1624,13 @@ H5AC_unprotect(H5F_t *f, const H5AC_class_t *type, haddr_t addr, void *thing)
assert(H5F_addr_ne((*info)->addr, addr));
flush = (*info)->type->flush;
- if ((flush)(f, H5AC_dxpl_id, TRUE, (*info)->addr, (*info)) < 0)
+ if ((flush)(f, dxpl_id, TRUE, (*info)->addr, (*info)) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush object");
#ifdef H5AC_DEBUG
cache->diagnostics[type_id].nflushes++;
#endif /* H5AC_DEBUG */
}
+
#ifdef H5AC_DEBUG
/*
* Remove the object's protect data to indicate that it is no longer
@@ -1079,7 +1689,7 @@ H5AC_debug(H5F_t UNUSED *f)
char s[32], ascii[32];
H5AC_t *cache = f->shared->cache;
double miss_rate;
-#endif
+#endif /* H5AC_DEBUG */
herr_t ret_value=SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5AC_debug, FAIL);
@@ -1138,8 +1748,9 @@ H5AC_debug(H5F_t UNUSED *f)
(long)(cache->diagnostics[i].ninits)));
}
}
-#endif
+#endif /* H5AC_DEBUG */
done:
FUNC_LEAVE_NOAPI(ret_value);
}
+
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index d587df6..96cf05c 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -34,6 +34,16 @@
# undef H5AC_DEBUG
#endif
+/* Dataset transfer property list for flush calls */
+/* (Collective set, "block before metadata write" set and "library internal" set) */
+/* (Global variable declaration, definition is in H5AC.c) */
+extern hid_t H5AC_dxpl_id;
+
+/* Dataset transfer property list for independent metadata I/O calls */
+/* (just "library internal" set - i.e. independent transfer mode) */
+/* (Global variable declaration, definition is in H5AC.c) */
+extern hid_t H5AC_ind_dxpl_id;
+
/*
* Class methods pertaining to caching. Each type of cached object will
* have a constant variable with permanent life-span that describes how
@@ -58,13 +68,15 @@ typedef enum H5AC_subid_t {
H5AC_NTYPES = 5 /*THIS MUST BE LAST! */
} H5AC_subid_t;
-typedef void *(*H5AC_load_func_t)(H5F_t*, hid_t dxpl_id, haddr_t addr, const void *udata1, void *udata2);
-typedef herr_t (*H5AC_flush_func_t)(H5F_t*, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing);
+typedef void *(*H5AC_load_func_t)(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *udata1, void *udata2);
+typedef herr_t (*H5AC_flush_func_t)(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing);
+typedef herr_t (*H5AC_dest_func_t)(H5F_t *f, void *thing);
typedef struct H5AC_class_t {
H5AC_subid_t id;
H5AC_load_func_t load;
H5AC_flush_func_t flush;
+ H5AC_dest_func_t dest;
} H5AC_class_t;
/*
@@ -81,6 +93,7 @@ typedef struct H5AC_class_t {
typedef struct H5AC_info_t {
const H5AC_class_t *type; /*type of object stored here */
haddr_t addr; /*file address for object */
+ hbool_t dirty; /* 'Dirty' flag for cached object */
} H5AC_info_t;
typedef H5AC_info_t *H5AC_info_ptr_t; /* Typedef for free lists */
@@ -95,6 +108,7 @@ typedef struct H5AC_prot_t {
typedef struct H5AC_t {
unsigned nslots; /*number of cache slots */
H5AC_info_t **slot; /*the cache slots, an array of pointers to the cached objects */
+ H5AC_info_t **dslot; /*"held object" cache slots, an array of pointers to dirty cached objects */
#ifdef H5AC_DEBUG
H5AC_prot_t *prot; /*the protected slots */
#endif /* H5AC_DEBUG */
@@ -105,6 +119,11 @@ typedef struct H5AC_t {
unsigned nmisses; /*number of cache misses */
unsigned ninits; /*number of cache inits */
unsigned nflushes; /*number of flushes to disk */
+#ifdef H5_HAVE_PARALLEL
+ unsigned ndestroys; /*number of cache destroys */
+ unsigned nholds; /*number of cache holds */
+ unsigned nrestores; /*number of cache restores */
+#endif /* H5_HAVE_PARALLEL */
} diagnostics[H5AC_NTYPES]; /*diagnostics for each type of object*/
#endif /* H5AC_DEBUG */
} H5AC_t;
@@ -114,39 +133,32 @@ typedef struct H5AC_t {
#define H5AC_BLOCK_BEFORE_META_WRITE_NAME "H5AC_block_before_meta_write"
#define H5AC_BLOCK_BEFORE_META_WRITE_SIZE sizeof(unsigned)
#define H5AC_BLOCK_BEFORE_META_WRITE_DEF 0
+
+/* Definitions for "library internal" property */
+#define H5AC_LIBRARY_INTERNAL_NAME "H5AC_library_internal"
+#define H5AC_LIBRARY_INTERNAL_SIZE sizeof(unsigned)
+#define H5AC_LIBRARY_INTERNAL_DEF 0
#endif /* H5_HAVE_PARALLEL */
/*
* Library prototypes.
*/
-H5_DLL herr_t H5AC_dest(H5F_t *f);
-H5_DLL void *H5AC_find_f(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
- const void *udata1, void *udata2);
-H5_DLL void *H5AC_protect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
+H5_DLL herr_t H5AC_init(void);
+H5_DLL herr_t H5AC_create(H5F_t *f, int size_hint);
+H5_DLL herr_t H5AC_set(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
+ void *thing);
+H5_DLL void *H5AC_protect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
const void *udata1, void *udata2);
-H5_DLL herr_t H5AC_unprotect(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
+H5_DLL herr_t H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
void *thing);
-H5_DLL herr_t H5AC_flush(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
+H5_DLL void *H5AC_find(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
+ haddr_t addr, const void *udata1, void *udata2);
+H5_DLL herr_t H5AC_flush(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
hbool_t destroy);
-H5_DLL herr_t H5AC_create(H5F_t *f, int size_hint);
-H5_DLL herr_t H5AC_rename(H5F_t *f, const H5AC_class_t *type,
+H5_DLL herr_t H5AC_rename(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
haddr_t old_addr, haddr_t new_addr);
-H5_DLL herr_t H5AC_set(H5F_t *f, const H5AC_class_t *type, haddr_t addr,
- void *thing);
+H5_DLL herr_t H5AC_dest(H5F_t *f, hid_t dxpl_id);
H5_DLL herr_t H5AC_debug(H5F_t *f);
-/* This seems to be slower than just calling H5AC_find_f, which performs the
- * cache lookup also. - QAK
- */
-#ifdef OLD_WAY
-#define H5AC_find(F,TYPE,ADDR,UDATA1,UDATA2) \
- ((F)->shared->cache->slot[H5AC_HASH(F,ADDR)]!=NULL && \
- ((F)->shared->cache->slot[H5AC_HASH(F,ADDR)]->type==(TYPE) && \
- (F)->shared->cache->slot[H5AC_HASH(F,ADDR)]->addr==ADDR) ? \
- ((F)->shared->cache->diagnostics[(TYPE)->id].nhits++, \
- (F)->shared->cache->slot[H5AC_HASH(F,ADDR)]) : \
- H5AC_find_f(F, TYPE, ADDR, UDATA1, UDATA2))
-#endif /* OLD_WAY */
-
#endif /* !_H5ACprivate_H */
diff --git a/src/H5Aprivate.h b/src/H5Aprivate.h
index 14d55d0..d9faaa7 100644
--- a/src/H5Aprivate.h
+++ b/src/H5Aprivate.h
@@ -28,7 +28,5 @@ typedef struct H5A_t H5A_t;
H5_DLL H5A_t *H5A_copy(const H5A_t *old_attr);
H5_DLL herr_t H5A_close(H5A_t *attr);
H5_DLL H5G_entry_t *H5A_entof(H5A_t *attr);
-H5_DLL hsize_t H5A_get_storage_size(H5A_t *attr);
-H5_DLL herr_t H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name);
#endif
diff --git a/src/H5B.c b/src/H5B.c
index 45d5dbd..e2ffcc8 100644
--- a/src/H5B.c
+++ b/src/H5B.c
@@ -106,7 +106,7 @@
#define BOUND(MIN,X,MAX) ((X)<(MIN)?(MIN):((X)>(MAX)?(MAX):(X)))
/* PRIVATE PROTOTYPES */
-static H5B_ins_t H5B_insert_helper(H5F_t *f, haddr_t addr,
+static H5B_ins_t H5B_insert_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr,
const H5B_class_t *type,
const double split_ratios[],
uint8_t *lt_key,
@@ -118,13 +118,14 @@ static H5B_ins_t H5B_insert_helper(H5F_t *f, haddr_t addr,
static herr_t H5B_insert_child(H5F_t *f, const H5B_class_t *type,
H5B_t *bt, int idx, haddr_t child,
H5B_ins_t anchor, void *md_key);
-static herr_t H5B_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5B_t *b);
static H5B_t *H5B_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_type, void *udata);
+static herr_t H5B_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5B_t *b);
+static herr_t H5B_dest(H5F_t *f, H5B_t *b);
static herr_t H5B_decode_key(H5F_t *f, H5B_t *bt, int idx);
static herr_t H5B_decode_keys(H5F_t *f, H5B_t *bt, int idx);
static size_t H5B_nodesize(H5F_t *f, const H5B_class_t *type,
size_t *total_nkey_size, size_t sizeof_rkey);
-static herr_t H5B_split(H5F_t *f, const H5B_class_t *type, H5B_t *old_bt,
+static herr_t H5B_split(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_t *old_bt,
haddr_t old_addr, int idx,
const double split_ratios[], void *udata,
haddr_t *new_addr/*out*/);
@@ -139,6 +140,7 @@ static const H5AC_class_t H5AC_BT[1] = {{
H5AC_BT_ID,
(H5AC_load_func_t)H5B_load,
(H5AC_flush_func_t)H5B_flush,
+ (H5AC_dest_func_t)H5B_dest,
}};
/* Interface initialization? */
@@ -185,7 +187,7 @@ H5FL_DEFINE_STATIC(H5B_t);
*-------------------------------------------------------------------------
*/
herr_t
-H5B_create(H5F_t *f, const H5B_class_t *type, void *udata,
+H5B_create(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
haddr_t *addr_p/*out*/)
{
H5B_t *bt = NULL;
@@ -210,13 +212,14 @@ H5B_create(H5F_t *f, const H5B_class_t *type, void *udata,
*/
sizeof_rkey = (type->get_sizeof_rkey) (f, udata);
size = H5B_nodesize(f, type, &total_native_keysize, sizeof_rkey);
- if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_BTREE, (hsize_t)size)))
+ H5_CHECK_OVERFLOW(size,size_t,hsize_t);
+ if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for B-tree root node");
if (NULL==(bt = H5FL_CALLOC(H5B_t)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree root node");
bt->type = type;
bt->sizeof_rkey = sizeof_rkey;
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->ndirty = 0;
bt->level = 0;
bt->left = HADDR_UNDEF;
@@ -253,7 +256,7 @@ H5B_create(H5F_t *f, const H5B_class_t *type, void *udata,
/*
* Cache the new B-tree node.
*/
- if (H5AC_set(f, H5AC_BT, *addr_p, bt) < 0)
+ if (H5AC_set(f, dxpl_id, H5AC_BT, *addr_p, bt) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree root node to cache");
#ifdef H5B_DEBUG
H5B_assert(f, *addr_p, type, udata);
@@ -261,14 +264,10 @@ H5B_create(H5F_t *f, const H5B_class_t *type, void *udata,
done:
if (ret_value<0) {
- H5MF_xfree(f, H5FD_MEM_BTREE, *addr_p, (hsize_t)size);
- if (bt) {
- H5FL_BLK_FREE (page,bt->page);
- H5FL_BLK_FREE (native_block,bt->native);
- H5FL_ARR_FREE (haddr_t,bt->child);
- H5FL_ARR_FREE (H5B_key_t,bt->key);
- H5FL_FREE (H5B_t,bt);
- }
+ H5_CHECK_OVERFLOW(size,size_t,hsize_t);
+ H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, *addr_p, (hsize_t)size);
+ if (bt)
+ H5B_dest(f,bt);
}
FUNC_LEAVE_NOAPI(ret_value);
@@ -321,7 +320,7 @@ H5B_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_type, void *udata)
bt->sizeof_rkey = (type->get_sizeof_rkey) (f, udata);
size = H5B_nodesize(f, type, &total_nkey_size, bt->sizeof_rkey);
bt->type = type;
- bt->dirty = FALSE;
+ bt->cache_info.dirty = FALSE;
bt->ndirty = 0;
if (NULL==(bt->page=H5FL_BLK_MALLOC(page,size)) ||
NULL==(bt->native=H5FL_BLK_MALLOC(native_block,total_nkey_size)) ||
@@ -373,13 +372,8 @@ H5B_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_type, void *udata)
ret_value = bt;
done:
- if (!ret_value && bt) {
- H5FL_ARR_FREE(haddr_t,bt->child);
- H5FL_ARR_FREE(H5B_key_t,bt->key);
- H5FL_BLK_FREE(page,bt->page);
- H5FL_BLK_FREE(native_block,bt->native);
- H5FL_FREE(H5B_t,bt);
- }
+ if (!ret_value && bt)
+ H5B_dest(f,bt);
FUNC_LEAVE_NOAPI(ret_value);
}
@@ -428,7 +422,7 @@ H5B_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5B_t *bt)
size = H5B_nodesize(f, bt->type, NULL, bt->sizeof_rkey);
- if (bt->dirty) {
+ if (bt->cache_info.dirty) {
/* magic number */
HDmemcpy(p, H5B_MAGIC, H5B_SIZEOF_MAGIC);
@@ -475,15 +469,12 @@ H5B_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5B_t *bt)
*/
if (H5F_block_write(f, H5FD_MEM_BTREE, addr, size, dxpl_id, bt->page)<0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTFLUSH, FAIL, "unable to save B-tree node to disk");
- bt->dirty = FALSE;
+ bt->cache_info.dirty = FALSE;
bt->ndirty = 0;
}
if (destroy) {
- H5FL_ARR_FREE(haddr_t,bt->child);
- H5FL_ARR_FREE(H5B_key_t,bt->key);
- H5FL_BLK_FREE(page,bt->page);
- H5FL_BLK_FREE(native_block,bt->native);
- H5FL_FREE(H5B_t,bt);
+ if(H5B_dest(f,bt)<0)
+ HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree node");
}
done:
@@ -492,6 +483,44 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5B_dest
+ *
+ * Purpose: Destroys a B-tree node in memory.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Jan 15 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B_dest(H5F_t UNUSED *f, H5B_t *bt)
+{
+ FUNC_ENTER_NOINIT(H5B_dest);
+
+ /*
+ * Check arguments.
+ */
+ assert(bt);
+
+ /* Verify that node is clean */
+ assert(bt->cache_info.dirty==0);
+
+ H5FL_ARR_FREE(haddr_t,bt->child);
+ H5FL_ARR_FREE(H5B_key_t,bt->key);
+ H5FL_BLK_FREE(page,bt->page);
+ H5FL_BLK_FREE(native_block,bt->native);
+ H5FL_FREE(H5B_t,bt);
+
+ FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5B_dest() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5B_find
*
* Purpose: Locate the specified information in a B-tree and return
@@ -518,7 +547,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B_find(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
+H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *udata)
{
H5B_t *bt = NULL;
int idx = -1, lt = 0, rt, cmp = 1;
@@ -540,7 +569,7 @@ H5B_find(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
* Perform a binary search to locate the child which contains
* the thing for which we're searching.
*/
- if (NULL == (bt = H5AC_protect(f, H5AC_BT, addr, type, udata)))
+ if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node");
rt = bt->nchildren;
@@ -549,7 +578,7 @@ H5B_find(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
if (H5B_decode_keys(f, bt, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, FAIL, "unable to decode B-tree key(s)");
/* compare */
- if ((cmp = (type->cmp3) (f, bt->key[idx].nkey, udata,
+ if ((cmp = (type->cmp3) (f, dxpl_id, bt->key[idx].nkey, udata,
bt->key[idx+1].nkey)) < 0) {
rt = idx;
} else {
@@ -564,15 +593,15 @@ H5B_find(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
*/
assert(idx >= 0 && idx < bt->nchildren);
if (bt->level > 0) {
- if (H5B_find(f, type, bt->child[idx], udata) < 0)
+ if (H5B_find(f, dxpl_id, type, bt->child[idx], udata) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "key not found in subtree");
} else {
- if ((type->found) (f, bt->child[idx], bt->key[idx].nkey, udata, bt->key[idx+1].nkey) < 0)
+ if ((type->found) (f, dxpl_id, bt->child[idx], bt->key[idx].nkey, udata, bt->key[idx+1].nkey) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "key not found in leaf node");
}
done:
- if (bt && H5AC_unprotect(f, H5AC_BT, addr, bt) < 0 && ret_value>=0)
+ if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt) < 0 && ret_value>=0)
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release node");
FUNC_LEAVE_NOAPI(ret_value);
@@ -606,7 +635,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5B_split(H5F_t *f, const H5B_class_t *type, H5B_t *old_bt, haddr_t old_addr,
+H5B_split(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_t *old_bt, haddr_t old_addr,
int idx, const double split_ratios[], void *udata,
haddr_t *new_addr_p/*out*/)
{
@@ -680,9 +709,9 @@ H5B_split(H5F_t *f, const H5B_class_t *type, H5B_t *old_bt, haddr_t old_addr,
/*
* Create the new B-tree node.
*/
- if (H5B_create(f, type, udata, new_addr_p/*out*/) < 0)
+ if (H5B_create(f, dxpl_id, type, udata, new_addr_p/*out*/) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create B-tree");
- if (NULL==(new_bt=H5AC_protect(f, H5AC_BT, *new_addr_p, type, udata)))
+ if (NULL==(new_bt=H5AC_protect(f, dxpl_id, H5AC_BT, *new_addr_p, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to protect B-tree");
new_bt->level = old_bt->level;
@@ -711,7 +740,7 @@ H5B_split(H5F_t *f, const H5B_class_t *type, H5B_t *old_bt, haddr_t old_addr,
/*
* Truncate the old node.
*/
- old_bt->dirty = TRUE;
+ old_bt->cache_info.dirty = TRUE;
old_bt->nchildren = nleft;
old_bt->ndirty = MIN(old_bt->ndirty, old_bt->nchildren);
@@ -722,15 +751,15 @@ H5B_split(H5F_t *f, const H5B_class_t *type, H5B_t *old_bt, haddr_t old_addr,
new_bt->right = old_bt->right;
if (H5F_addr_defined(old_bt->right)) {
- if (NULL == (tmp_bt = H5AC_find_f(f, H5AC_BT, old_bt->right, type, udata)))
+ if (NULL == (tmp_bt = H5AC_find(f, dxpl_id, H5AC_BT, old_bt->right, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load right sibling");
- tmp_bt->dirty = TRUE;
+ tmp_bt->cache_info.dirty = TRUE;
tmp_bt->left = *new_addr_p;
}
old_bt->right = *new_addr_p;
done:
- if (new_bt && H5AC_unprotect(f, H5AC_BT, *new_addr_p, new_bt) < 0 && ret_value>=0)
+ if (new_bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, *new_addr_p, new_bt) < 0 && ret_value>=0)
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node");
FUNC_LEAVE_NOAPI(ret_value);
@@ -833,7 +862,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr,
+H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
const double split_ratios[], void *udata)
{
/*
@@ -862,7 +891,7 @@ H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr,
assert(type->sizeof_nkey <= sizeof _lt_key);
assert(H5F_addr_defined(addr));
- if ((my_ins = H5B_insert_helper(f, addr, type, split_ratios, lt_key,
+ if ((my_ins = H5B_insert_helper(f, dxpl_id, addr, type, split_ratios, lt_key,
&lt_key_changed, md_key, udata, rt_key, &rt_key_changed, &child/*out*/))<0 ||
my_ins<0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to insert key");
@@ -871,7 +900,7 @@ H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr,
assert(H5B_INS_RIGHT == my_ins);
/* the current root */
- if (NULL == (bt = H5AC_find_f(f, H5AC_BT, addr, type, udata)))
+ if (NULL == (bt = H5AC_find(f, dxpl_id, H5AC_BT, addr, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to locate root of B-tree");
level = bt->level;
if (!lt_key_changed) {
@@ -881,7 +910,7 @@ H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr,
}
/* the new node */
- if (NULL == (bt = H5AC_find_f(f, H5AC_BT, child, type, udata)))
+ if (NULL == (bt = H5AC_find(f, dxpl_id, H5AC_BT, child, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load new node");
if (!rt_key_changed) {
if (!bt->key[bt->nchildren].nkey &&
@@ -896,13 +925,13 @@ H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr,
* from "moving".
*/
size = H5B_nodesize(f, type, NULL, bt->sizeof_rkey);
- if (HADDR_UNDEF==(old_root=H5MF_alloc(f, H5FD_MEM_BTREE, size)))
+ if (HADDR_UNDEF==(old_root=H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate file space to move root");
/* update the new child's left pointer */
- if (NULL == (bt = H5AC_find_f(f, H5AC_BT, child, type, udata)))
+ if (NULL == (bt = H5AC_find(f, dxpl_id, H5AC_BT, child, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load new child");
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->left = old_root;
/*
@@ -910,27 +939,27 @@ H5B_insert(H5F_t *f, const H5B_class_t *type, haddr_t addr,
* at the new location -QAK
*/
/* Bring the old root into the cache if it's not already */
- if (NULL == (bt = H5AC_find_f(f, H5AC_BT, addr, type, udata)))
+ if (NULL == (bt = H5AC_find(f, dxpl_id, H5AC_BT, addr, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load new child");
/* Make certain the old root info is marked as dirty before moving it, */
/* so it is certain to be written out at the new location */
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
/* Make a copy of the old root information */
if (NULL == (bt = H5B_copy(f, bt)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to copy old root");
/* Move the location on the disk */
- if (H5AC_rename(f, H5AC_BT, addr, old_root) < 0)
+ if (H5AC_rename(f, dxpl_id, H5AC_BT, addr, old_root) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to move B-tree root node");
/* Insert the copy of the old root into the file again */
- if (H5AC_set(f, H5AC_BT, addr, bt) < 0)
+ if (H5AC_set(f, dxpl_id, H5AC_BT, addr, bt) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTFLUSH, FAIL, "unable to flush old B-tree root node");
/* clear the old root info at the old address (we already copied it) */
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->left = HADDR_UNDEF;
bt->right = HADDR_UNDEF;
@@ -992,7 +1021,7 @@ H5B_insert_child(H5F_t *f, const H5B_class_t *type, H5B_t *bt,
assert(bt);
assert(bt->nchildren<2*H5F_KVALUE(f, type));
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
recsize = bt->sizeof_rkey + H5F_SIZEOF_ADDR(f);
if (H5B_INS_RIGHT == anchor) {
@@ -1107,7 +1136,7 @@ H5B_insert_child(H5F_t *f, const H5B_class_t *type, H5B_t *bt,
*-------------------------------------------------------------------------
*/
static H5B_ins_t
-H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
+H5B_insert_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
const double split_ratios[], uint8_t *lt_key,
hbool_t *lt_key_changed, uint8_t *md_key, void *udata,
uint8_t *rt_key, hbool_t *rt_key_changed,
@@ -1144,7 +1173,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* data. When the search completes IDX points to the child that
* should get the new data.
*/
- if (NULL == (bt = H5AC_protect(f, H5AC_BT, addr, type, udata)))
+ if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to load node");
rt = bt->nchildren;
@@ -1152,7 +1181,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
idx = (lt + rt) / 2;
if (H5B_decode_keys(f, bt, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, H5B_INS_ERROR, "unable to decode key");
- if ((cmp = (type->cmp3) (f, bt->key[idx].nkey, udata,
+ if ((cmp = (type->cmp3) (f, dxpl_id, bt->key[idx].nkey, udata,
bt->key[idx+1].nkey)) < 0) {
rt = idx;
} else {
@@ -1168,20 +1197,20 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
assert(0 == bt->level);
bt->key[0].nkey = bt->native;
bt->key[1].nkey = bt->native + type->sizeof_nkey;
- if ((type->new_node)(f, H5B_INS_FIRST, bt->key[0].nkey, udata,
+ if ((type->new_node)(f, dxpl_id, H5B_INS_FIRST, bt->key[0].nkey, udata,
bt->key[1].nkey, bt->child + 0/*out*/) < 0) {
bt->key[0].nkey = bt->key[1].nkey = NULL;
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, H5B_INS_ERROR, "unable to create leaf node");
}
bt->nchildren = 1;
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->ndirty = 1;
bt->key[0].dirty = TRUE;
bt->key[1].dirty = TRUE;
idx = 0;
if (type->follow_min) {
- if ((my_ins = (type->insert)(f, bt->child[idx], bt->key[idx].nkey,
+ if ((my_ins = (type->insert)(f, dxpl_id, bt->child[idx], bt->key[idx].nkey,
lt_key_changed, md_key, udata, bt->key[idx+1].nkey,
rt_key_changed, &child_addr/*out*/)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "unable to insert first leaf node");
@@ -1197,7 +1226,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
idx = 0;
if (H5B_decode_keys(f, bt, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, H5B_INS_ERROR, "unable to decode key");
- if ((my_ins = H5B_insert_helper(f, bt->child[idx], type, split_ratios,
+ if ((my_ins = H5B_insert_helper(f, dxpl_id, bt->child[idx], type, split_ratios,
bt->key[idx].nkey, lt_key_changed, md_key,
udata, bt->key[idx+1].nkey, rt_key_changed,
&child_addr/*out*/))<0)
@@ -1211,7 +1240,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
idx = 0;
if (H5B_decode_keys(f, bt, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, H5B_INS_ERROR, "unable to decode key");
- if ((my_ins = (type->insert)(f, bt->child[idx], bt->key[idx].nkey,
+ if ((my_ins = (type->insert)(f, dxpl_id, bt->child[idx], bt->key[idx].nkey,
lt_key_changed, md_key, udata, bt->key[idx+1].nkey,
rt_key_changed, &child_addr/*out*/)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert minimum leaf node");
@@ -1226,7 +1255,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, H5B_INS_ERROR, "unable to decode key");
my_ins = H5B_INS_LEFT;
HDmemcpy(md_key, bt->key[idx].nkey, type->sizeof_nkey);
- if ((type->new_node)(f, H5B_INS_LEFT, bt->key[idx].nkey, udata,
+ if ((type->new_node)(f, dxpl_id, H5B_INS_LEFT, bt->key[idx].nkey, udata,
md_key, &child_addr/*out*/) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert minimum leaf node");
*lt_key_changed = TRUE;
@@ -1239,7 +1268,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
idx = bt->nchildren - 1;
if (H5B_decode_keys(f, bt, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, H5B_INS_ERROR, "unable to decode key");
- if ((my_ins = H5B_insert_helper(f, bt->child[idx], type, split_ratios,
+ if ((my_ins = H5B_insert_helper(f, dxpl_id, bt->child[idx], type, split_ratios,
bt->key[idx].nkey, lt_key_changed, md_key, udata,
bt->key[idx+1].nkey, rt_key_changed, &child_addr/*out*/)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert maximum subtree");
@@ -1252,7 +1281,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
idx = bt->nchildren - 1;
if (H5B_decode_keys(f, bt, idx) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, H5B_INS_ERROR, "unable to decode key");
- if ((my_ins = (type->insert)(f, bt->child[idx], bt->key[idx].nkey,
+ if ((my_ins = (type->insert)(f, dxpl_id, bt->child[idx], bt->key[idx].nkey,
lt_key_changed, md_key, udata, bt->key[idx+1].nkey,
rt_key_changed, &child_addr/*out*/)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert maximum leaf node");
@@ -1267,7 +1296,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, H5B_INS_ERROR, "unable to decode key");
my_ins = H5B_INS_RIGHT;
HDmemcpy(md_key, bt->key[idx+1].nkey, type->sizeof_nkey);
- if ((type->new_node)(f, H5B_INS_RIGHT, md_key, udata,
+ if ((type->new_node)(f, dxpl_id, H5B_INS_RIGHT, md_key, udata,
bt->key[idx+1].nkey, &child_addr/*out*/) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert maximum leaf node");
*rt_key_changed = TRUE;
@@ -1285,7 +1314,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* Follow a branch out of this node to another subtree.
*/
assert(idx >= 0 && idx < bt->nchildren);
- if ((my_ins = H5B_insert_helper(f, bt->child[idx], type, split_ratios,
+ if ((my_ins = H5B_insert_helper(f, dxpl_id, bt->child[idx], type, split_ratios,
bt->key[idx].nkey, lt_key_changed, md_key, udata,
bt->key[idx+1].nkey, rt_key_changed, &child_addr/*out*/)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert subtree");
@@ -1294,7 +1323,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* Follow a branch out of this node to a leaf node of some other type.
*/
assert(idx >= 0 && idx < bt->nchildren);
- if ((my_ins = (type->insert)(f, bt->child[idx], bt->key[idx].nkey,
+ if ((my_ins = (type->insert)(f, dxpl_id, bt->child[idx], bt->key[idx].nkey,
lt_key_changed, md_key, udata, bt->key[idx+1].nkey,
rt_key_changed, &child_addr/*out*/)) < 0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert leaf node");
@@ -1305,7 +1334,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* Update the left and right keys of the current node.
*/
if (*lt_key_changed) {
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->key[idx].dirty = TRUE;
if (idx > 0) {
*lt_key_changed = FALSE;
@@ -1314,7 +1343,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
}
}
if (*rt_key_changed) {
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->key[idx+1].dirty = TRUE;
if (idx+1 < bt->nchildren) {
*rt_key_changed = FALSE;
@@ -1327,7 +1356,7 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* The insertion simply changed the address for the child.
*/
bt->child[idx] = child_addr;
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->ndirty = MAX(bt->ndirty, idx+1);
ret_value = H5B_INS_NOOP;
@@ -1336,10 +1365,10 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* If this node is full then split it before inserting the new child.
*/
if (bt->nchildren == 2 * H5F_KVALUE(f, type)) {
- if (H5B_split(f, type, bt, addr, idx, split_ratios, udata,
+ if (H5B_split(f, dxpl_id, type, bt, addr, idx, split_ratios, udata,
new_node_p/*out*/)<0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, H5B_INS_ERROR, "unable to split node");
- if (NULL == (twin = H5AC_protect(f, H5AC_BT, *new_node_p, type, udata)))
+ if (NULL == (twin = H5AC_protect(f, dxpl_id, H5AC_BT, *new_node_p, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to load node");
if (idx<bt->nchildren) {
tmp_bt = bt;
@@ -1384,8 +1413,8 @@ H5B_insert_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
done:
{
- herr_t e1 = (bt && H5AC_unprotect(f, H5AC_BT, addr, bt) < 0);
- herr_t e2 = (twin && H5AC_unprotect(f, H5AC_BT, *new_node_p, twin)<0);
+ herr_t e1 = (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt) < 0);
+ herr_t e2 = (twin && H5AC_unprotect(f, dxpl_id, H5AC_BT, *new_node_p, twin)<0);
if (e1 || e2) /*use vars to prevent short-circuit of side effects */
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to release node(s)");
}
@@ -1418,7 +1447,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B_iterate (H5F_t *f, const H5B_class_t *type, H5B_operator_t op, haddr_t addr, void *udata)
+H5B_iterate (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t op, haddr_t addr, void *udata)
{
H5B_t *bt = NULL;
haddr_t next_addr;
@@ -1440,11 +1469,11 @@ H5B_iterate (H5F_t *f, const H5B_class_t *type, H5B_operator_t op, haddr_t addr,
assert(H5F_addr_defined(addr));
assert(udata);
- if (NULL == (bt=H5AC_find_f(f, H5AC_BT, addr, type, udata)))
+ if (NULL == (bt=H5AC_find(f, dxpl_id, H5AC_BT, addr, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node");
if (bt->level > 0) {
/* Keep following the left-most child until we reach a leaf node. */
- if (H5B_iterate(f, type, op, bt->child[0], udata)<0)
+ if (H5B_iterate(f, dxpl_id, type, op, bt->child[0], udata)<0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "unable to list B-tree node");
} else {
/*
@@ -1461,7 +1490,7 @@ H5B_iterate (H5F_t *f, const H5B_class_t *type, H5B_operator_t op, haddr_t addr,
* leave the B-tree node protected during an application
* callback.
*/
- if (NULL==(bt=H5AC_find_f (f, H5AC_BT, cur_addr, type, udata)))
+ if (NULL==(bt=H5AC_find (f, dxpl_id, H5AC_BT, cur_addr, type, udata)))
HGOTO_ERROR (H5E_BTREE, H5E_CANTLOAD, FAIL, "B-tree node");
for (i=0; i<bt->nchildren; i++)
child[i] = bt->child[i];
@@ -1480,7 +1509,7 @@ H5B_iterate (H5F_t *f, const H5B_class_t *type, H5B_operator_t op, haddr_t addr,
* application callback.
*/
for (i=0; i<nchildren && ret_flag==H5B_ITER_CONT; i++) {
- ret_flag = (*op)(f, key+i*type->sizeof_nkey,
+ ret_flag = (*op)(f, dxpl_id, key+i*type->sizeof_nkey,
child[i], key+(i+1)*type->sizeof_nkey, udata);
if (ret_flag==H5B_ITER_ERROR) {
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "iterator function failed");
@@ -1530,7 +1559,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_ins_t
-H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
+H5B_remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
int level, uint8_t *lt_key/*out*/,
hbool_t *lt_key_changed/*out*/, void *udata,
uint8_t *rt_key/*out*/, hbool_t *rt_key_changed/*out*/)
@@ -1557,14 +1586,14 @@ H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* Perform a binary search to locate the child which contains the thing
* for which we're searching.
*/
- if (NULL==(bt=H5AC_protect(f, H5AC_BT, addr, type, udata)))
+ if (NULL==(bt=H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to load B-tree node");
rt = bt->nchildren;
while (lt<rt && cmp) {
idx = (lt+rt)/2;
if (H5B_decode_keys(f, bt, idx)<0)
HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, H5B_INS_ERROR, "unable to decode B-tree key(s)");
- if ((cmp=(type->cmp3)(f, bt->key[idx].nkey, udata,
+ if ((cmp=(type->cmp3)(f, dxpl_id, bt->key[idx].nkey, udata,
bt->key[idx+1].nkey))<0) {
rt = idx;
} else {
@@ -1581,7 +1610,7 @@ H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
assert(idx>=0 && idx<bt->nchildren);
if (bt->level>0) {
/* We're at an internal node -- call recursively */
- if ((ret_value=H5B_remove_helper(f,
+ if ((ret_value=H5B_remove_helper(f, dxpl_id,
bt->child[idx], type, level+1, bt->key[idx].nkey/*out*/,
lt_key_changed/*out*/, udata, bt->key[idx+1].nkey/*out*/,
rt_key_changed/*out*/))<0)
@@ -1592,7 +1621,7 @@ H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* has a removal method. Pass the removal request to the pointed-to
* object and let it decide how to progress.
*/
- if ((ret_value=(type->remove)(f,
+ if ((ret_value=(type->remove)(f, dxpl_id,
bt->child[idx], bt->key[idx].nkey, lt_key_changed, udata,
bt->key[idx+1].nkey, rt_key_changed))<0)
HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, H5B_INS_ERROR, "key not found in leaf node");
@@ -1616,7 +1645,7 @@ H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* our right key and indicate that it changed.
*/
if (*lt_key_changed) {
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->key[idx].dirty = TRUE;
if (idx>0) {
*lt_key_changed = FALSE;
@@ -1625,7 +1654,7 @@ H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
}
}
if (*rt_key_changed) {
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->key[idx+1].dirty = TRUE;
if (idx+1<bt->nchildren) {
*rt_key_changed = FALSE;
@@ -1645,29 +1674,29 @@ H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* keys and the subtree pointer. Free this node (unless it's the
* root node) and return H5B_INS_REMOVE.
*/
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->nchildren = 0;
bt->ndirty = 0;
if (level>0) {
if (H5F_addr_defined(bt->left)) {
- if (NULL==(sibling=H5AC_find_f(f, H5AC_BT, bt->left, type, udata)))
+ if (NULL==(sibling=H5AC_find(f, dxpl_id, H5AC_BT, bt->left, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to unlink node from tree");
sibling->right = bt->right;
- sibling->dirty = TRUE;
+ sibling->cache_info.dirty = TRUE;
}
if (H5F_addr_defined(bt->right)) {
- if (NULL==(sibling=H5AC_find_f(f, H5AC_BT, bt->right, type, udata)))
+ if (NULL==(sibling=H5AC_find(f, dxpl_id, H5AC_BT, bt->right, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to unlink node from tree");
sibling->left = bt->left;
- sibling->dirty = TRUE;
+ sibling->cache_info.dirty = TRUE;
}
bt->left = HADDR_UNDEF;
bt->right = HADDR_UNDEF;
sizeof_rkey = (type->get_sizeof_rkey)(f, udata);
sizeof_node = H5B_nodesize(f, type, NULL, sizeof_rkey);
- if (H5AC_unprotect(f, H5AC_BT, addr, bt)<0 ||
- H5AC_flush(f, H5AC_BT, addr, TRUE)<0 ||
- H5MF_xfree(f, H5FD_MEM_BTREE, addr, sizeof_node)<0) {
+ if (H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt)<0 ||
+ H5AC_flush(f, dxpl_id, H5AC_BT, addr, TRUE)<0 ||
+ H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, sizeof_node)<0) {
bt = NULL;
HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to free B-tree node");
}
@@ -1682,7 +1711,7 @@ H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* key into lt_key and notify the caller that the left key has
* changed. Return H5B_INS_NOOP.
*/
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->nchildren -= 1;
bt->ndirty = bt->nchildren;
@@ -1715,7 +1744,7 @@ H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* freed). We copy the new right-most key into rt_key and notify the
* caller that the right key has changed. Return H5B_INS_NOOP.
*/
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->nchildren -= 1;
bt->ndirty = MIN(bt->ndirty, bt->nchildren);
assert(bt->key[bt->nchildren].nkey);
@@ -1731,7 +1760,7 @@ H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
* the right are shifted left by one place. The subtree has already
* been freed). Return H5B_INS_NOOP.
*/
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
bt->nchildren -= 1;
bt->ndirty = bt->nchildren;
@@ -1760,7 +1789,7 @@ H5B_remove_helper(H5F_t *f, haddr_t addr, const H5B_class_t *type,
done:
- if (bt && H5AC_unprotect(f, H5AC_BT, addr, bt)<0 && ret_value>=0)
+ if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt)<0 && ret_value>=0)
HDONE_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to release node");
FUNC_LEAVE_NOAPI(ret_value);
@@ -1786,7 +1815,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B_remove(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
+H5B_remove(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *udata)
{
/* These are defined this way to satisfy alignment constraints */
uint64_t _lt_key[128], _rt_key[128];
@@ -1806,7 +1835,7 @@ H5B_remove(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
assert(H5F_addr_defined(addr));
/* The actual removal */
- if (H5B_remove_helper(f, addr, type, 0, lt_key, &lt_key_changed,
+ if (H5B_remove_helper(f, dxpl_id, addr, type, 0, lt_key, &lt_key_changed,
udata, rt_key, &rt_key_changed)==H5B_INS_ERROR)
HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to remove entry from B-tree");
@@ -1814,11 +1843,11 @@ H5B_remove(H5F_t *f, const H5B_class_t *type, haddr_t addr, void *udata)
* If the B-tree is now empty then make sure we mark the root node as
* being at level zero
*/
- if (NULL==(bt=H5AC_find_f(f, H5AC_BT, addr, type, udata)))
+ if (NULL==(bt=H5AC_find(f, dxpl_id, H5AC_BT, addr, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree root node");
if (0==bt->nchildren && 0!=bt->level) {
bt->level = 0;
- bt->dirty = TRUE;
+ bt->cache_info.dirty = TRUE;
}
#ifdef H5B_DEBUG
@@ -1994,7 +2023,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5B_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
+H5B_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
const H5B_class_t *type, void *udata)
{
H5B_t *bt = NULL;
@@ -2016,7 +2045,7 @@ H5B_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
/*
* Load the tree node.
*/
- if (NULL == (bt = H5AC_find_f(f, H5AC_BT, addr, type, udata)))
+ if (NULL == (bt = H5AC_find(f, dxpl_id, H5AC_BT, addr, type, udata)))
HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node");
/*
@@ -2034,7 +2063,7 @@ H5B_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth,
(unsigned long) (bt->sizeof_rkey));
HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Dirty flag:",
- bt->dirty ? "True" : "False");
+ bt->cache_info.dirty ? "True" : "False");
HDfprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
"Number of initial dirty children:",
(int) (bt->ndirty));
@@ -2116,7 +2145,7 @@ H5B_assert(H5F_t *f, haddr_t addr, const H5B_class_t *type, void *udata)
}
}
/* Initialize the queue */
- bt = H5AC_find_f(f, H5AC_BT, addr, type, udata);
+ bt = H5AC_find(f, dxpl_id, H5AC_BT, addr, type, udata);
assert(bt);
cur = H5MM_calloc(sizeof(struct child_t));
assert (cur);
@@ -2131,7 +2160,7 @@ H5B_assert(H5F_t *f, haddr_t addr, const H5B_class_t *type, void *udata)
* test.
*/
for (ncell = 0; cur; ncell++) {
- bt = H5AC_protect(f, H5AC_BT, cur->addr, type, udata);
+ bt = H5AC_protect(f, dxpl_id, H5AC_BT, cur->addr, type, udata);
assert(bt);
/* Check node header */
@@ -2176,7 +2205,7 @@ H5B_assert(H5F_t *f, haddr_t addr, const H5B_class_t *type, void *udata)
}
}
/* Release node */
- status = H5AC_unprotect(f, H5AC_BT, cur->addr, bt);
+ status = H5AC_unprotect(f, dxpl_id, H5AC_BT, cur->addr, bt);
assert(status >= 0);
/* Advance current location in queue */
diff --git a/src/H5Bprivate.h b/src/H5Bprivate.h
index d22edcb..5c8ef1a 100644
--- a/src/H5Bprivate.h
+++ b/src/H5Bprivate.h
@@ -58,7 +58,7 @@ typedef enum H5B_iterate_t {
} H5B_iterate_t;
/* Define the operator callback function pointer for H5B_iterate() */
-typedef H5B_iterate_t (*H5B_operator_t)(H5F_t *f, void *_lt_key, haddr_t addr,
+typedef H5B_iterate_t (*H5B_operator_t)(H5F_t *f, hid_t, void *_lt_key, haddr_t addr,
void *_rt_key, void *_udata);
/*
@@ -74,13 +74,13 @@ typedef struct H5B_class_t {
H5B_subid_t id; /*id as found in file*/
size_t sizeof_nkey; /*size of native (memory) key*/
size_t (*get_sizeof_rkey)(H5F_t*, const void*); /*raw key size */
- herr_t (*new_node)(H5F_t*, H5B_ins_t, void*, void*, void*, haddr_t*);
- int (*cmp2)(H5F_t*, void*, void*, void*); /*compare 2 keys */
- int (*cmp3)(H5F_t*, void*, void*, void*); /*compare 3 keys */
- herr_t (*found)(H5F_t*, haddr_t, const void*, void*, const void*);
+ herr_t (*new_node)(H5F_t*, hid_t, H5B_ins_t, void*, void*, void*, haddr_t*);
+ int (*cmp2)(H5F_t*, hid_t, void*, void*, void*); /*compare 2 keys */
+ int (*cmp3)(H5F_t*, hid_t, void*, void*, void*); /*compare 3 keys */
+ herr_t (*found)(H5F_t*, hid_t, haddr_t, const void*, void*, const void*);
/* insert new data */
- H5B_ins_t (*insert)(H5F_t*, haddr_t, void*, hbool_t*, void*, void*,
+ H5B_ins_t (*insert)(H5F_t*, hid_t, haddr_t, void*, hbool_t*, void*, void*,
void*, hbool_t*, haddr_t*);
/* min insert uses min leaf, not new(), similarily for max insert */
@@ -88,7 +88,7 @@ typedef struct H5B_class_t {
hbool_t follow_max;
/* remove existing data */
- H5B_ins_t (*remove)(H5F_t*, haddr_t, void*, hbool_t*, void*, void*,
+ H5B_ins_t (*remove)(H5F_t*, hid_t, haddr_t, void*, hbool_t*, void*, void*,
hbool_t*);
/* encode, decode, debug key values */
@@ -112,7 +112,6 @@ typedef struct H5B_t {
/* first field in structure */
const H5B_class_t *type; /*type of tree */
size_t sizeof_rkey; /*size of raw (disk) key */
- hbool_t dirty; /*something in the tree is dirty */
int ndirty; /*num child ptrs to emit */
int level; /*node level */
haddr_t left; /*address of left sibling */
@@ -127,17 +126,17 @@ typedef struct H5B_t {
/*
* Library prototypes.
*/
-H5_DLL herr_t H5B_debug (H5F_t *f, haddr_t addr, FILE * stream,
- int indent, int fwidth, const H5B_class_t *type,
- void *udata);
-H5_DLL herr_t H5B_create (H5F_t *f, const H5B_class_t *type, void *udata,
+H5_DLL herr_t H5B_create (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
haddr_t *addr_p/*out*/);
-H5_DLL herr_t H5B_find (H5F_t *f, const H5B_class_t *type, haddr_t addr,
+H5_DLL herr_t H5B_find (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
void *udata);
-H5_DLL herr_t H5B_insert (H5F_t *f, const H5B_class_t *type, haddr_t addr,
+H5_DLL herr_t H5B_insert (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
const double split_ratios[], void *udata);
-H5_DLL herr_t H5B_remove(H5F_t *f, const H5B_class_t *type, haddr_t addr,
- void *udata);
-H5_DLL herr_t H5B_iterate (H5F_t *f, const H5B_class_t *type, H5B_operator_t
+H5_DLL herr_t H5B_iterate (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t
op, haddr_t addr, void *udata);
+H5_DLL herr_t H5B_remove(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+ void *udata);
+H5_DLL herr_t H5B_debug (H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream,
+ int indent, int fwidth, const H5B_class_t *type,
+ void *udata);
#endif
diff --git a/src/H5D.c b/src/H5D.c
index 0aa194a..ec9dbfb 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -65,13 +65,13 @@ static int interface_initialize_g = 0;
/* Local functions */
static herr_t H5D_init_interface(void);
-static herr_t H5D_alloc_storage (H5F_t *f, H5D_t *dset,H5D_time_alloc_t time_alloc,
+static herr_t H5D_alloc_storage (H5F_t *f, hid_t dxpl_id, H5D_t *dset,H5D_time_alloc_t time_alloc,
hbool_t update_time, hbool_t full_overwrite);
-static herr_t H5D_init_storage(H5D_t *dataset, hbool_t full_overwrite);
+static herr_t H5D_init_storage(H5D_t *dataset, hbool_t full_overwrite, hid_t dxpl_id);
static H5D_t * H5D_new(hid_t dcpl_id, hbool_t creating);
static H5D_t * H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
- const H5S_t *space, hid_t dcpl_id);
-static H5D_t * H5D_open_oid(H5G_entry_t *ent);
+ const H5S_t *space, hid_t dcpl_id, hid_t dxpl_id);
+static H5D_t * H5D_open_oid(H5G_entry_t *ent, hid_t dxpl_id);
static herr_t H5D_read(H5D_t *dataset, const H5T_t *mem_type,
const H5S_t *mem_space, const H5S_t *file_space,
hid_t dset_xfer_plist, void *buf/*out*/);
@@ -79,11 +79,13 @@ static herr_t H5D_write(H5D_t *dataset, const H5T_t *mem_type,
const H5S_t *mem_space, const H5S_t *file_space,
hid_t dset_xfer_plist, const void *buf);
static herr_t H5D_fill(const void *fill, const H5T_t *fill_type, void *buf,
- const H5T_t *buf_type, const H5S_t *space);
-static herr_t H5D_get_space_status(H5D_t *dset, H5D_space_status_t *allocation);
-static hsize_t H5D_get_storage_size(H5D_t *dset);
+ const H5T_t *buf_type, const H5S_t *space, hid_t dxpl_id);
+static herr_t H5D_get_space_status(H5D_t *dset, H5D_space_status_t *allocation, hid_t dxpl_id);
+static hsize_t H5D_get_storage_size(H5D_t *dset, hid_t dxpl_id);
static haddr_t H5D_get_offset(H5D_t *dset);
-static herr_t H5D_set_extent(H5D_t *dataset, const hsize_t *size);
+static herr_t H5D_extend(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id);
+static herr_t H5D_set_extent(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id);
+static herr_t H5D_close(H5D_t *dataset);
/* Declare a free list to manage the H5D_t struct */
H5FL_DEFINE_STATIC(H5D_t);
@@ -167,6 +169,7 @@ H5D_init_interface(void)
* - Default value for file driver info
* - Default value for 'gather reads' property
* - Default value for vector size
+ * - Default value for I/O transfer mode
* - Default value for EDC property
* - Default value for filter callback
*/
@@ -187,6 +190,7 @@ H5D_init_interface(void)
hid_t def_vfl_id = H5D_XFER_VFL_ID_DEF;
void *def_vfl_info = H5D_XFER_VFL_INFO_DEF;
size_t def_hyp_vec_size = H5D_XFER_HYPER_VECTOR_SIZE_DEF;
+ H5FD_mpio_xfer_t def_io_xfer_mode = H5D_XFER_IO_XFER_MODE_DEF;
H5Z_EDC_t enable_edc = H5D_XFER_EDC_DEF;
H5Z_cb_t filter_cb = H5D_XFER_FILTER_CB_DEF;
@@ -291,6 +295,10 @@ H5D_init_interface(void)
if(H5P_register(xfer_pclass,H5D_XFER_HYPER_VECTOR_SIZE_NAME,H5D_XFER_HYPER_VECTOR_SIZE_SIZE,&def_hyp_vec_size,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class");
+ /* Register the I/O transfer mode property */
+ if(H5P_register(xfer_pclass,H5D_XFER_IO_XFER_MODE_NAME,H5D_XFER_IO_XFER_MODE_SIZE,&def_io_xfer_mode,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class");
+
/* Register the EDC property */
if(H5P_register(xfer_pclass,H5D_XFER_EDC_NAME,H5D_XFER_EDC_SIZE,&enable_edc,NULL,NULL,NULL,NULL,NULL,NULL)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class");
@@ -607,7 +615,7 @@ H5D_xfer_create(hid_t dxpl_id, void UNUSED *create_data)
/* Increment the reference count on the driver and copy the driver info */
if(H5I_inc_ref(driver_id)<0)
HGOTO_ERROR (H5E_DATASET, H5E_CANTINC, FAIL, "Can't increment VFL driver ID");
- if((driver_info = H5FD_dxpl_copy(driver_id, driver_info))==NULL)
+ if(H5FD_dxpl_copy(driver_id, driver_info, &driver_info)<0)
HGOTO_ERROR (H5E_DATASET, H5E_CANTCOPY, FAIL, "Can't copy VFL driver");
/* Set the driver information for the new property list */
@@ -775,7 +783,7 @@ H5Dcreate(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not dataset create property list");
/* build and open the new dataset */
- if (NULL == (new_dset = H5D_create(loc, name, type, space, plist_id)))
+ if (NULL == (new_dset = H5D_create(loc, name, type, space, plist_id, H5AC_dxpl_id)))
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create dataset");
/* Register the new dataset to get an ID for it */
@@ -833,11 +841,11 @@ H5Dopen(hid_t loc_id, const char *name)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name");
/* Find the dataset object */
- if (H5G_find(loc, name, NULL, &ent) < 0)
+ if (H5G_find(loc, name, NULL, &ent, H5AC_dxpl_id) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_NOTFOUND, FAIL, "not found");
/* Open the dataset */
- if ((ret_value = H5D_open(&ent)) < 0)
+ if ((ret_value = H5D_open(&ent, H5AC_dxpl_id)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "can't register dataset");
done:
@@ -972,7 +980,7 @@ herr_t H5Dget_space_status(hid_t dset_id, H5D_space_status_t *allocation)
HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset");
/* Read data space address and return */
- if(FAIL==(ret_value=H5D_get_space_status(dset, allocation)))
+ if(FAIL==(ret_value=H5D_get_space_status(dset, allocation, H5AC_dxpl_id)))
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get space status");
done:
@@ -996,7 +1004,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-static herr_t H5D_get_space_status(H5D_t *dset, H5D_space_status_t *allocation)
+static herr_t H5D_get_space_status(H5D_t *dset, H5D_space_status_t *allocation, hid_t dxpl_id)
{
H5S_t *space; /* Dataset's dataspace */
hsize_t space_allocated; /* The number of bytes allocated for chunks */
@@ -1026,7 +1034,7 @@ static herr_t H5D_get_space_status(H5D_t *dset, H5D_space_status_t *allocation)
full_size=((hsize_t)total_elem)*type_size;
/* Difficult to error check, since the error value is 0 and 0 is a valid value... :-/ */
- space_allocated=H5D_get_storage_size(dset);
+ space_allocated=H5D_get_storage_size(dset,dxpl_id);
/* Decide on how much of the space is allocated */
if(space_allocated==0)
@@ -1402,7 +1410,7 @@ H5Dextend(hid_t dset_id, const hsize_t *size)
HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no size specified");
/* Increase size */
- if (H5D_extend (dset, size)<0)
+ if (H5D_extend (dset, size, H5AC_dxpl_id)<0)
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to extend dataset");
done:
@@ -1507,7 +1515,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
+H5D_update_entry_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset, H5P_genplist_t *plist)
{
size_t ohdr_size = H5D_MINHDR_SIZE; /* Size of dataset's object header */
H5G_entry_t *ent=NULL; /* Dataset's group entry */
@@ -1547,11 +1555,11 @@ H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
ohdr_size += layout->size;
/* Create (open for write access) an object header */
- if (H5O_create(file, ohdr_size, ent) < 0)
+ if (H5O_create(file, dxpl_id, ohdr_size, ent) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create dataset object header");
/* Get a pointer to the object header itself */
- if((oh=H5O_protect(ent))==NULL)
+ if((oh=H5O_protect(ent, dxpl_id))==NULL)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to protect dataset object header");
/* Point at dataset's copy, to cache it for later */
@@ -1584,7 +1592,7 @@ H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
if (H5O_copy(H5O_FILL, fill_prop, &fill) == NULL)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT,FAIL, "unable to copy fill value");
- if (fill_prop->buf && fill_prop->size > 0 && H5O_fill_convert(&fill, type) < 0)
+ if (fill_prop->buf && fill_prop->size > 0 && H5O_fill_convert(&fill, type, dxpl_id) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to convert fill value to dataset type");
fill.fill_defined = TRUE;
@@ -1603,7 +1611,7 @@ H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT,FAIL, "unable to create dataset");
/* Write new fill value message */
- if (H5O_append(file, oh, H5O_FILL_NEW, H5O_FLAG_CONSTANT, &fill) < 0)
+ if (H5O_append(file, dxpl_id, oh, H5O_FILL_NEW, H5O_FLAG_CONSTANT, &fill) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update fill value header message");
/* If there is valid information for the old fill value struct, update it */
@@ -1616,7 +1624,7 @@ H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT,FAIL,"unable to copy fill value");
/* Write old fill value */
- if (fill_prop->buf && H5O_append(file, oh, H5O_FILL, H5O_FLAG_CONSTANT, fill_prop) < 0)
+ if (fill_prop->buf && H5O_append(file, dxpl_id, oh, H5O_FILL, H5O_FLAG_CONSTANT, fill_prop) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update fill value header message");
/* Update dataset creation property */
@@ -1625,8 +1633,8 @@ H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
} /* end if */
/* Update the type and space header messages */
- if (H5O_append(file, oh, H5O_DTYPE, H5O_FLAG_CONSTANT | H5O_FLAG_SHARED, type) < 0 ||
- H5S_append(file, oh, space) < 0)
+ if (H5O_append(file, dxpl_id, oh, H5O_DTYPE, H5O_FLAG_CONSTANT | H5O_FLAG_SHARED, type) < 0 ||
+ H5S_append(file, dxpl_id, oh, space) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update type or space header messages");
/* Update the filters message, if this is a chunked dataset */
@@ -1637,7 +1645,7 @@ H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve pipeline filter");
if (pline.nfilters > 0 &&
- H5O_append(file, oh, H5O_PLINE, H5O_FLAG_CONSTANT, &pline) < 0)
+ H5O_append(file, dxpl_id, oh, H5O_PLINE, H5O_FLAG_CONSTANT, &pline) < 0)
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update filter header message");
} /* end if */
@@ -1646,7 +1654,7 @@ H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
* allocation until later.
*/
if (alloc_time == H5D_ALLOC_TIME_EARLY)
- if (H5D_alloc_storage(file, dset, H5D_ALLOC_CREATE, FALSE, FALSE) < 0)
+ if (H5D_alloc_storage(file, dxpl_id, dset, H5D_ALLOC_CREATE, FALSE, FALSE) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize storage");
/* Update external storage message */
@@ -1657,12 +1665,12 @@ H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
for (i = 0; i < efl->nused; ++i)
heap_size += H5HL_ALIGN(HDstrlen(efl->slot[i].name) + 1);
- if (H5HL_create(file, heap_size, &efl->heap_addr/*out*/) < 0 ||
- H5HL_insert(file, efl->heap_addr, 1, "") == (size_t)(-1))
+ if (H5HL_create(file, dxpl_id, heap_size, &efl->heap_addr/*out*/) < 0 ||
+ H5HL_insert(file, dxpl_id, efl->heap_addr, 1, "") == (size_t)(-1))
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create external file list name heap");
for (i = 0; i < efl->nused; ++i) {
- size_t offset = H5HL_insert(file, efl->heap_addr,
+ size_t offset = H5HL_insert(file, dxpl_id, efl->heap_addr,
HDstrlen(efl->slot[i].name) + 1, efl->slot[i].name);
assert(0 == efl->slot[i].name_offset);
@@ -1673,21 +1681,21 @@ H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
efl->slot[i].name_offset = offset;
}
- if (H5O_append(file, oh, H5O_EFL, H5O_FLAG_CONSTANT, efl) < 0)
+ if (H5O_append(file, dxpl_id, oh, H5O_EFL, H5O_FLAG_CONSTANT, efl) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update external file list message");
}
/* Update layout message */
/* (Don't make layout message constant yet, since space may not be allocated) */
/* Note: this is relying on H5D_alloc_storage not calling H5O_modify during dataset creation */
- if (H5D_COMPACT != layout->type && H5O_append(file, oh, H5O_LAYOUT, 0, layout) < 0)
+ if (H5D_COMPACT != layout->type && H5O_append(file, dxpl_id, oh, H5O_LAYOUT, 0, layout) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update layout");
#ifdef H5O_ENABLE_BOGUS
/*
* Add a "bogus" message.
*/
- if (H5O_bogus_oh(file, oh))<0)
+ if (H5O_bogus_oh(file, dxpl_id, oh))<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to update 'bogus' message");
#endif /* H5O_ENABLE_BOGUS */
@@ -1698,7 +1706,7 @@ H5D_update_entry_info(H5F_t *file, H5D_t *dset, H5P_genplist_t *plist)
done:
/* Release pointer to object header itself */
if(ent!=NULL && oh!=NULL)
- if(H5O_unprotect(ent,oh)<0)
+ if(H5O_unprotect(ent,oh, dxpl_id)<0)
HDONE_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to unprotect dataset object header");
FUNC_LEAVE_NOAPI(ret_value);
@@ -1764,7 +1772,7 @@ done:
*/
static H5D_t *
H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
- const H5S_t *space, hid_t dcpl_id)
+ const H5S_t *space, hid_t dcpl_id, hid_t dxpl_id)
{
H5D_t *new_dset = NULL;
H5D_t *ret_value = NULL;
@@ -1775,7 +1783,7 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
H5F_t *file;
int chunk_ndims = 0;
hsize_t chunk_size[32]={0};
- H5P_genplist_t *new_plist=NULL; /* New Property list */
+ H5P_genplist_t *dc_plist=NULL; /* New Property list */
FUNC_ENTER_NOAPI(H5D_create, NULL);
@@ -1798,7 +1806,7 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCOPY, NULL, "can't copy datatype");
/* What file is the dataset being added to? */
- if (NULL==(file=H5G_insertion_file(loc, name)))
+ if (NULL==(file=H5G_insertion_file(loc, name, dxpl_id)))
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to locate insertion point");
/* Mark any VL datatypes as being on disk now */
@@ -1820,16 +1828,16 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
H5D_alloc_time_t alloc_time; /* Dataset's allocation time */
/* Get new dataset's property list object */
- if (NULL == (new_plist = H5I_object(new_dset->dcpl_id)))
+ if (NULL == (dc_plist = H5I_object(new_dset->dcpl_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "can't get dataset creation property list");
- if(H5P_get(new_plist, H5D_CRT_DATA_PIPELINE_NAME, &dcpl_pline) < 0)
+ if(H5P_get(dc_plist, H5D_CRT_DATA_PIPELINE_NAME, &dcpl_pline) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve pipeline filter");
- if(H5P_get(new_plist, H5D_CRT_LAYOUT_NAME, &dcpl_layout) < 0)
+ if(H5P_get(dc_plist, H5D_CRT_LAYOUT_NAME, &dcpl_layout) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve layout");
if(dcpl_pline.nfilters > 0 && H5D_CHUNKED != dcpl_layout)
HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, NULL, "filters can only be used with chunked layout");
- if(H5P_get(new_plist, H5D_CRT_ALLOC_TIME_NAME, &alloc_time) < 0)
+ if(H5P_get(dc_plist, H5D_CRT_ALLOC_TIME_NAME, &alloc_time) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve space allocation time");
/* Check if the alloc_time is the default and set it accordingly */
@@ -1864,15 +1872,15 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, NULL, "Parallel I/O does not support filters yet");
/* Chunked datasets are non-default, so retrieve their info here */
- if(H5P_get(new_plist, H5D_CRT_CHUNK_DIM_NAME, &chunk_ndims) < 0)
+ if(H5P_get(dc_plist, H5D_CRT_CHUNK_DIM_NAME, &chunk_ndims) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve layout");
/* Get the dataset's external file list information */
- if(H5P_get(new_plist, H5D_CRT_EXT_FILE_LIST_NAME, &new_dset->efl) < 0)
+ if(H5P_get(dc_plist, H5D_CRT_EXT_FILE_LIST_NAME, &new_dset->efl) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve external file list");
/* Get the dataset's data storage method */
- if(H5P_get(new_plist, H5D_CRT_LAYOUT_NAME, &(new_dset->layout.type)) < 0)
+ if(H5P_get(dc_plist, H5D_CRT_LAYOUT_NAME, &(new_dset->layout.type)) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve layout");
} /* end if */
@@ -1930,7 +1938,7 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
* The chunk size of a dimension with a fixed size cannot exceed
* the maximum dimension size
*/
- if(H5P_get(new_plist, H5D_CRT_CHUNK_SIZE_NAME, chunk_size) < 0)
+ if(H5P_get(dc_plist, H5D_CRT_CHUNK_SIZE_NAME, chunk_size) < 0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve chunk size");
if (H5S_get_simple_extent_dims(new_dset->space, NULL, max_dim)<0)
@@ -1977,7 +1985,7 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
/*
* Update the dataset's entry info.
*/
- if (H5D_update_entry_info(file, new_dset, new_plist) != SUCCEED)
+ if (H5D_update_entry_info(file, dxpl_id, new_dset, dc_plist) != SUCCEED)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "can't update the metadata cache");
/*
@@ -1985,7 +1993,7 @@ H5D_create(H5G_entry_t *loc, const char *name, const H5T_t *type,
* "H5G_entry_t" object to the group this dataset is being initially
* created in.
*/
- if (H5G_insert(loc, name, &new_dset->ent) < 0)
+ if (H5G_insert(loc, name, &new_dset->ent, dxpl_id) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to name dataset");
/* Success */
@@ -2029,7 +2037,7 @@ done:
*-------------------------------------------------------------------------
*/
htri_t
-H5D_isa(H5G_entry_t *ent)
+H5D_isa(H5G_entry_t *ent, hid_t dxpl_id)
{
htri_t exists;
htri_t ret_value=TRUE; /* Return value */
@@ -2039,14 +2047,14 @@ H5D_isa(H5G_entry_t *ent)
assert(ent);
/* Data type */
- if ((exists=H5O_exists(ent, H5O_DTYPE, 0))<0) {
+ if ((exists=H5O_exists(ent, H5O_DTYPE, 0, dxpl_id))<0) {
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to read object header");
} else if (!exists) {
HGOTO_DONE(FALSE);
}
/* Layout */
- if ((exists=H5O_exists(ent, H5O_LAYOUT, 0))<0) {
+ if ((exists=H5O_exists(ent, H5O_LAYOUT, 0, dxpl_id))<0) {
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to read object header");
} else if (!exists) {
HGOTO_DONE(FALSE);
@@ -2078,7 +2086,7 @@ done:
*-------------------------------------------------------------------------
*/
hid_t
-H5D_open(H5G_entry_t *ent)
+H5D_open(H5G_entry_t *ent, hid_t dxpl_id)
{
hid_t ret_value; /* Return value */
@@ -2094,7 +2102,7 @@ H5D_open(H5G_entry_t *ent)
H5E_clear();
/* Open the dataset object */
- if ((dataset=H5D_open_oid(ent)) ==NULL)
+ if ((dataset=H5D_open_oid(ent, dxpl_id)) ==NULL)
HGOTO_ERROR(H5E_DATASET, H5E_NOTFOUND, FAIL, "not found");
/* Create an atom for the dataset */
@@ -2149,7 +2157,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5D_t *
-H5D_open_oid(H5G_entry_t *ent)
+H5D_open_oid(H5G_entry_t *ent, hid_t dxpl_id)
{
H5D_t *dataset = NULL; /*new dataset struct */
H5D_t *ret_value = NULL; /*return value */
@@ -2177,10 +2185,10 @@ H5D_open_oid(H5G_entry_t *ent)
HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, NULL, "unable to open");
/* Get the type and space */
- if (NULL==(dataset->type=H5O_read(&(dataset->ent), H5O_DTYPE, 0, NULL)))
+ if (NULL==(dataset->type=H5O_read(&(dataset->ent), H5O_DTYPE, 0, NULL, dxpl_id)))
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to load type info from dataset header");
- if (NULL==(dataset->space=H5S_read(&(dataset->ent))))
+ if (NULL==(dataset->space=H5S_read(&(dataset->ent),dxpl_id)))
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to load space info from dataset header");
/* Get dataset creation property list object */
@@ -2188,7 +2196,7 @@ H5D_open_oid(H5G_entry_t *ent)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "can't get dataset creation property list");
/* Get the optional filters message */
- if(NULL == H5O_read(&(dataset->ent), H5O_PLINE, 0, &pline)) {
+ if(NULL == H5O_read(&(dataset->ent), H5O_PLINE, 0, &pline, dxpl_id)) {
H5E_clear();
HDmemset(&pline, 0, sizeof(pline));
}
@@ -2205,7 +2213,7 @@ H5D_open_oid(H5G_entry_t *ent)
* values are copied to the dataset create plist so the user can query
* them.
*/
- if (NULL==H5O_read(&(dataset->ent), H5O_LAYOUT, 0, &(dataset->layout)))
+ if (NULL==H5O_read(&(dataset->ent), H5O_LAYOUT, 0, &(dataset->layout), dxpl_id))
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to read data layout message");
switch (dataset->layout.type) {
case H5D_CONTIGUOUS:
@@ -2249,7 +2257,7 @@ H5D_open_oid(H5G_entry_t *ent)
H5O_reset(H5O_FILL, fill_prop);
/* Get the new fill value message */
- if(NULL == H5O_read(&(dataset->ent), H5O_FILL_NEW, 0, &fill)) {
+ if(NULL == H5O_read(&(dataset->ent), H5O_FILL_NEW, 0, &fill, dxpl_id)) {
H5E_clear();
HDmemset(&fill, 0, sizeof(fill));
@@ -2277,7 +2285,7 @@ H5D_open_oid(H5G_entry_t *ent)
} else {
/* For compatibility with v1.4. Retrieve the old fill value message.
* If size is 0, make it -1 for undefined. */
- if(NULL == H5O_read(&(dataset->ent), H5O_FILL, 0, fill_prop)) {
+ if(NULL == H5O_read(&(dataset->ent), H5O_FILL, 0, fill_prop, dxpl_id)) {
H5E_clear();
HDmemset(fill_prop, 0, sizeof(H5O_fill_t));
}
@@ -2301,7 +2309,7 @@ H5D_open_oid(H5G_entry_t *ent)
* also undefined when space allocate time is H5D_ALLOC_TIME_LATE. */
if( !H5F_addr_defined(dataset->layout.addr)) {
HDmemset(&dataset->efl,0,sizeof(H5O_efl_t));
- if(NULL != H5O_read(&(dataset->ent), H5O_EFL, 0, &dataset->efl))
+ if(NULL != H5O_read(&(dataset->ent), H5O_EFL, 0, &dataset->efl, dxpl_id))
if(H5P_set(plist, H5D_CRT_EXT_FILE_LIST_NAME, &dataset->efl) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set external file list");
}
@@ -2313,7 +2321,7 @@ H5D_open_oid(H5G_entry_t *ent)
if ((H5F_get_intent(dataset->ent.file) & H5F_ACC_RDWR)
&& (dataset->layout.type!=H5D_COMPACT && dataset->layout.addr==HADDR_UNDEF)
&& (IS_H5FD_MPIO(dataset->ent.file) || IS_H5FD_MPIPOSIX(dataset->ent.file))) {
- if (H5D_alloc_storage(dataset->ent.file, dataset,H5D_ALLOC_OPEN, TRUE, FALSE)<0)
+ if (H5D_alloc_storage(dataset->ent.file, dxpl_id, dataset,H5D_ALLOC_OPEN, TRUE, FALSE)<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to initialize file storage");
}
@@ -2357,7 +2365,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
+static herr_t
H5D_close(H5D_t *dataset)
{
unsigned free_failed;
@@ -2377,7 +2385,7 @@ H5D_close(H5D_t *dataset)
/* Update header message of layout for compact dataset. */
if(dataset->layout.type==H5D_COMPACT && dataset->layout.dirty) {
- if(H5O_modify(&(dataset->ent), H5O_LAYOUT, 0, 0, 1, &(dataset->layout))<0)
+ if(H5O_modify(&(dataset->ent), H5O_LAYOUT, 0, 0, 1, &(dataset->layout), H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update layout message");
dataset->layout.dirty = FALSE;
} /* end if */
@@ -2482,7 +2490,6 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
hsize_t request_nelmts; /*requested strip mine */
H5T_bkg_t need_bkg; /*type of background buf*/
#ifdef H5_HAVE_PARALLEL
- H5FD_mpio_dxpl_t *dx = NULL;
H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT; /*xfer_mode for this request */
hbool_t xfer_mode_changed=0; /*xfer_mode needs restore */
hbool_t doing_mpio=0; /*This is an MPIO access */
@@ -2519,11 +2526,7 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
/* Collect Parallel I/O information for possible later use */
if (H5FD_MPIO==H5P_peek_hid_t(dx_plist,H5D_XFER_VFL_ID_NAME)) {
doing_mpio++;
- if (NULL == (dx=H5P_peek_voidp(dx_plist,H5D_XFER_VFL_INFO_NAME))) {
- HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to retrieve data xfer info");
- } else {
- xfer_mode = dx->xfer_mode;
- }
+ xfer_mode=H5P_peek_unsigned(dx_plist, H5D_XFER_IO_XFER_MODE_NAME);
} /* end if */
/* Collective access is not permissible without the MPIO or MPIPOSIX driver */
if (doing_mpio && xfer_mode==H5FD_MPIO_COLLECTIVE &&
@@ -2578,7 +2581,7 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
HGOTO_DONE(SUCCEED);
/* Go fill the user's selection with the dataset's fill value */
- if(H5D_fill(fill.buf,fill.type,buf,mem_type,mem_space)<0) {
+ if(H5D_fill(fill.buf,fill.type,buf,mem_type,mem_space, dxpl_id)<0) {
HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "filling buf failed");
} else
HGOTO_DONE(SUCCEED);
@@ -2592,7 +2595,7 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
* enough value in xfer_parms since turning off data type conversion also
* turns off background preservation.
*/
- if (NULL==(tpath=H5T_path_find(dataset->type, mem_type, NULL, NULL))) {
+ if (NULL==(tpath=H5T_path_find(dataset->type, mem_type, NULL, NULL, dxpl_id))) {
HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types");
} else if (!H5T_IS_NOOP(tpath)) {
if ((src_id=H5I_register(H5I_DATATYPE, H5T_copy(dataset->type, H5T_COPY_ALL)))<0 ||
@@ -2661,15 +2664,14 @@ H5D_read(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
* Better way is to get a temporary data_xfer property with
* INDEPENDENT xfer_mode and pass it downwards.
*/
- dx->xfer_mode = H5FD_MPIO_INDEPENDENT;
+ xfer_mode = H5FD_MPIO_INDEPENDENT;
+ if(H5P_set (dx_plist, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set transfer mode");
xfer_mode_changed++; /* restore it before return */
#ifdef H5D_DEBUG
- if (H5DEBUG(D)) {
+ if (H5DEBUG(D))
fprintf(H5DEBUG(D),
- "H5D: Cannot handle this COLLECTIVE read request. Do it via INDEPENDENT calls\n"
- "dx->xfermode was %d, changed to %d\n",
- xfer_mode, dx->xfer_mode);
- } /* end if */
+ "H5D: Cannot handle this COLLECTIVE read request. Do it via INDEPENDENT calls\n");
#endif
} /* end if */
#endif /*H5_HAVE_PARALLEL*/
@@ -2797,12 +2799,12 @@ done:
/* restore xfer_mode due to the kludge */
if (doing_mpio && xfer_mode_changed) {
#ifdef H5D_DEBUG
- if (H5DEBUG(D)) {
- fprintf (H5DEBUG(D), "H5D: dx->xfermode was %d, restored to %d\n",
- dx->xfer_mode, xfer_mode);
- } /* end if */
+ if (H5DEBUG(D))
+ fprintf (H5DEBUG(D), "H5D: dx->xfer_mode was COLLECTIVE, restored to INDEPENDENT\n");
#endif
- dx->xfer_mode = xfer_mode;
+ xfer_mode = H5FD_MPIO_COLLECTIVE;
+ if(H5P_set (dx_plist, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set transfer mode");
} /* end if */
#endif /*H5_HAVE_PARALLEL*/
/* Release selection iterators */
@@ -2896,7 +2898,6 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
hsize_t request_nelmts; /*requested strip mine */
H5T_bkg_t need_bkg; /*type of background buf*/
#ifdef H5_HAVE_PARALLEL
- H5FD_mpio_dxpl_t *dx = NULL;
H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT; /*xfer_mode for this request */
hbool_t xfer_mode_changed=0; /*xfer_mode needs restore */
hbool_t doing_mpio=0; /*This is an MPIO access */
@@ -2949,11 +2950,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
/* Collect Parallel I/O information for possible later use */
if (H5FD_MPIO==H5P_peek_hid_t(dx_plist,H5D_XFER_VFL_ID_NAME)) {
doing_mpio++;
- if (NULL==(dx=H5P_peek_voidp(dx_plist,H5D_XFER_VFL_INFO_NAME))) {
- HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to retrieve data xfer info");
- } else {
- xfer_mode = dx->xfer_mode;
- }
+ xfer_mode=H5P_peek_unsigned(dx_plist, H5D_XFER_IO_XFER_MODE_NAME);
} /* end if */
/* Collective access is not permissible without the MPIO or MPIPOSIX driver */
@@ -2997,7 +2994,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
HGOTO_ERROR (H5E_DATASET, H5E_BADVALUE, FAIL, "can't retrieve number of elements in file dataset");
/* Allocate storage */
- if(H5D_alloc_storage(dataset->ent.file, dataset,H5D_ALLOC_WRITE, TRUE, (hbool_t)((hsize_t)file_nelmts==nelmts ? TRUE : FALSE))<0)
+ if(H5D_alloc_storage(dataset->ent.file,dxpl_id,dataset,H5D_ALLOC_WRITE, TRUE, (hbool_t)((hsize_t)file_nelmts==nelmts ? TRUE : FALSE))<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize storage");
} /* end if */
@@ -3009,7 +3006,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
* enough value in xfer_parms since turning off data type conversion also
* turns off background preservation.
*/
- if (NULL==(tpath=H5T_path_find(mem_type, dataset->type, NULL, NULL))) {
+ if (NULL==(tpath=H5T_path_find(mem_type, dataset->type, NULL, NULL, dxpl_id))) {
HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types");
} else if (!H5T_IS_NOOP(tpath)) {
if ((src_id = H5I_register(H5I_DATATYPE, H5T_copy(mem_type, H5T_COPY_ALL)))<0 ||
@@ -3076,14 +3073,13 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
* Better way is to get a temporary data_xfer property with
* INDEPENDENT xfer_mode and pass it downwards.
*/
- dx->xfer_mode = H5FD_MPIO_INDEPENDENT;
+ xfer_mode = H5FD_MPIO_INDEPENDENT;
+ if(H5P_set (dx_plist, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set transfer mode");
xfer_mode_changed++; /* restore it before return */
#ifdef H5D_DEBUG
- if (H5DEBUG(D)) {
- fprintf(H5DEBUG(D),
- "H5D: Cannot handle this COLLECTIVE write request. Do it via INDEPENDENT calls\n"
- "dx->xfermode was %d, changed to %d\n", xfer_mode, dx->xfer_mode);
- } /* end if */
+ if (H5DEBUG(D))
+ fprintf(H5DEBUG(D), "H5D: Cannot handle this COLLECTIVE write request. Do it via INDEPENDENT calls\n");
#endif
} /* end if */
#endif /*H5_HAVE_PARALLEL*/
@@ -3213,7 +3209,7 @@ H5D_write(H5D_t *dataset, const H5T_t *mem_type, const H5S_t *mem_space,
* Update modification time. We have to do this explicitly because
* writing to a dataset doesn't necessarily change the object header.
*/
- if (H5O_touch(&(dataset->ent), FALSE)<0)
+ if (H5O_touch(&(dataset->ent), FALSE, dxpl_id)<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update modification time");
done:
@@ -3221,12 +3217,12 @@ done:
/* restore xfer_mode due to the kludge */
if (doing_mpio && xfer_mode_changed) {
#ifdef H5D_DEBUG
- if (H5DEBUG(D)) {
- fprintf (H5DEBUG(D), "H5D: dx->xfermode was %d, restored to %d\n",
- dx->xfer_mode, xfer_mode);
- } /* end if */
+ if (H5DEBUG(D))
+ fprintf (H5DEBUG(D), "H5D: dx->xfer_mode was COLLECTIVE, restored to INDEPENDENT\n");
#endif
- dx->xfer_mode = xfer_mode;
+ xfer_mode = H5FD_MPIO_COLLECTIVE;
+ if(H5P_set (dx_plist, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set transfer mode");
} /* end if */
#endif /*H5_HAVE_PARALLEL*/
/* Release selection iterators */
@@ -3270,8 +3266,8 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5D_extend (H5D_t *dataset, const hsize_t *size)
+static herr_t
+H5D_extend (H5D_t *dataset, const hsize_t *size, hid_t dxpl_id)
{
int changed; /* Flag to indicate that the dataspace was successfully extended */
H5S_t *space = NULL; /* Dataset's dataspace */
@@ -3296,12 +3292,12 @@ H5D_extend (H5D_t *dataset, const hsize_t *size)
if (changed>0){
/* Save the new dataspace in the file if necessary */
- if (H5S_modify (&(dataset->ent), space, TRUE)<0)
+ if (H5S_modify (&(dataset->ent), space, TRUE, dxpl_id)<0)
HGOTO_ERROR (H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to update file with new dataspace");
/* Allocate space for the new parts of the dataset, if appropriate */
if(dataset->alloc_time==H5D_ALLOC_TIME_EARLY)
- if (H5D_alloc_storage(dataset->ent.file, dataset, H5D_ALLOC_EXTEND, TRUE, FALSE)<0)
+ if (H5D_alloc_storage(dataset->ent.file, dxpl_id, dataset, H5D_ALLOC_EXTEND, TRUE, FALSE)<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset with fill value");
} /* end if */
@@ -3414,7 +3410,7 @@ H5D_get_file (const H5D_t *dset)
*-------------------------------------------------------------------------
*/
static herr_t
-H5D_alloc_storage (H5F_t *f, H5D_t *dset/*in,out*/, H5D_time_alloc_t time_alloc,
+H5D_alloc_storage (H5F_t *f, hid_t dxpl_id, H5D_t *dset/*in,out*/, H5D_time_alloc_t time_alloc,
hbool_t update_time, hbool_t full_overwrite)
{
struct H5O_layout_t *layout; /* The dataset's layout information */
@@ -3444,7 +3440,7 @@ H5D_alloc_storage (H5F_t *f, H5D_t *dset/*in,out*/, H5D_time_alloc_t time_alloc,
for (u=0, nbytes=1; u<layout->ndims; u++)
nbytes *= layout->dim[u];
assert (nbytes>0);
- if (HADDR_UNDEF==(layout->addr=H5MF_alloc(f, H5FD_MEM_DRAW, nbytes)))
+ if (HADDR_UNDEF==(layout->addr=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, nbytes)))
HGOTO_ERROR (H5E_IO, H5E_NOSPACE, FAIL, "unable to reserve file space");
/* Indicate that we allocated space */
@@ -3455,7 +3451,7 @@ H5D_alloc_storage (H5F_t *f, H5D_t *dset/*in,out*/, H5D_time_alloc_t time_alloc,
case H5D_CHUNKED:
if(layout->addr==HADDR_UNDEF) {
/* Create the root of the B-tree that describes chunked storage */
- if (H5F_istore_create (f, layout/*out*/)<0)
+ if (H5F_istore_create (f, dxpl_id, layout/*out*/)<0)
HGOTO_ERROR (H5E_IO, H5E_CANTINIT, FAIL, "unable to initialize chunked storage");
/* Indicate that we allocated space */
@@ -3492,7 +3488,7 @@ H5D_alloc_storage (H5F_t *f, H5D_t *dset/*in,out*/, H5D_time_alloc_t time_alloc,
/* If we are filling the dataset on allocation, do that now */
if(dset->fill_time==H5D_FILL_TIME_ALLOC
&& !(dset->alloc_time==H5D_ALLOC_TIME_INCR && time_alloc==H5D_ALLOC_WRITE)) {
- if(H5D_init_storage(dset, full_overwrite) < 0)
+ if(H5D_init_storage(dset, full_overwrite, dxpl_id) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset with fill value");
} /* end if */
@@ -3500,7 +3496,7 @@ H5D_alloc_storage (H5F_t *f, H5D_t *dset/*in,out*/, H5D_time_alloc_t time_alloc,
* (this is only for forward compatibility).
*/
if(time_alloc!=H5D_ALLOC_CREATE)
- if (H5O_modify (&(dset->ent), H5O_LAYOUT, 0, H5O_FLAG_CONSTANT, update_time, &(dset->layout)) < 0)
+ if (H5O_modify (&(dset->ent), H5O_LAYOUT, 0, H5O_FLAG_CONSTANT, update_time, &(dset->layout), dxpl_id) < 0)
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update layout message");
} /* end if */
} /* end if */
@@ -3532,7 +3528,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5D_init_storage(H5D_t *dset, hbool_t full_overwrite)
+H5D_init_storage(H5D_t *dset, hbool_t full_overwrite, hid_t dxpl_id)
{
hssize_t snpoints; /* Number of points in space (for error checking) */
size_t npoints; /* Number of points in space */
@@ -3573,9 +3569,8 @@ H5D_init_storage(H5D_t *dset, hbool_t full_overwrite)
if (NULL == (plist = H5I_object(dset->dcpl_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list");
- if (H5F_contig_fill(dset->ent.file, H5P_DATASET_XFER_DEFAULT,
- &(dset->layout), plist, &(dset->efl), space,
- &dset->fill, H5T_get_size(dset->type))<0)
+ if (H5F_contig_fill(dset->ent.file, dxpl_id, &(dset->layout),
+ plist, &(dset->efl), space, &dset->fill, H5T_get_size(dset->type))<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to allocate all chunks of dataset");
} /* end if */
break;
@@ -3598,8 +3593,7 @@ H5D_init_storage(H5D_t *dset, hbool_t full_overwrite)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get simple data space info");
dim[ndims] = dset->layout.dim[ndims];
- if (H5F_istore_allocate(dset->ent.file, H5P_DATASET_XFER_DEFAULT,
- &(dset->layout), dim, plist, full_overwrite)<0)
+ if (H5F_istore_allocate(dset->ent.file, dxpl_id, &(dset->layout), dim, plist, full_overwrite)<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to allocate all chunks of dataset");
} /* end if */
break;
@@ -3644,7 +3638,7 @@ H5Dget_storage_size(hid_t dset_id)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a dataset");
/* Set return value */
- ret_value = H5D_get_storage_size(dset);
+ ret_value = H5D_get_storage_size(dset,H5AC_dxpl_id);
done:
FUNC_LEAVE_API(ret_value);
@@ -3669,7 +3663,7 @@ done:
*-------------------------------------------------------------------------
*/
static hsize_t
-H5D_get_storage_size(H5D_t *dset)
+H5D_get_storage_size(H5D_t *dset, hid_t dxpl_id)
{
unsigned u; /* Index variable */
hsize_t ret_value;
@@ -3681,7 +3675,7 @@ H5D_get_storage_size(H5D_t *dset)
if(dset->layout.addr == HADDR_UNDEF)
ret_value=0;
else
- ret_value = H5F_istore_allocated(dset->ent.file, dset->layout.ndims,
+ ret_value = H5F_istore_allocated(dset->ent.file, dxpl_id, dset->layout.ndims,
dset->layout.addr);
break;
@@ -4162,7 +4156,7 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
static herr_t
-H5D_fill(const void *fill, const H5T_t *fill_type, void *buf, const H5T_t *buf_type, const H5S_t *space)
+H5D_fill(const void *fill, const H5T_t *fill_type, void *buf, const H5T_t *buf_type, const H5S_t *space, hid_t dxpl_id)
{
H5T_path_t *tpath = NULL; /* Conversion information*/
uint8_t *tconv_buf = NULL; /* Data type conv buffer */
@@ -4201,7 +4195,7 @@ H5D_fill(const void *fill, const H5T_t *fill_type, void *buf, const H5T_t *buf_t
/* Convert memory buffer into disk buffer */
/* Set up type conversion function */
- if (NULL == (tpath = H5T_path_find(fill_type, buf_type, NULL, NULL))) {
+ if (NULL == (tpath = H5T_path_find(fill_type, buf_type, NULL, NULL, dxpl_id))) {
HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types");
} else if (!H5T_IS_NOOP(tpath)) {
if ((src_id = H5I_register(H5I_DATATYPE, H5T_copy(fill_type, H5T_COPY_ALL)))<0 ||
@@ -4210,7 +4204,7 @@ H5D_fill(const void *fill, const H5T_t *fill_type, void *buf, const H5T_t *buf_t
}
/* Perform data type conversion */
- if (H5T_convert(tpath, src_id, dst_id, (hsize_t)1, 0, 0, tconv_buf, bkg_buf, H5P_DATASET_XFER_DEFAULT)<0)
+ if (H5T_convert(tpath, src_id, dst_id, (hsize_t)1, 0, 0, tconv_buf, bkg_buf, dxpl_id)<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "data type conversion failed");
/* Fill the selection in the memory buffer */
@@ -4271,7 +4265,7 @@ H5Dfill(const void *fill, hid_t fill_type_id, void *buf, hid_t buf_type_id, hid_
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a datatype");
/* Fill the selection in the memory buffer */
- if(H5D_fill(fill,fill_type,buf,buf_type,space)<0)
+ if(H5D_fill(fill,fill_type,buf,buf_type,space, H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTENCODE, FAIL, "filling selection failed");
done:
@@ -4314,7 +4308,7 @@ H5Dset_extent(hid_t dset_id, const hsize_t *size)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no size specified");
/* Private function */
- if(H5D_set_extent(dset, size) < 0)
+ if(H5D_set_extent(dset, size, H5AC_dxpl_id) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to set extend dataset");
done:
@@ -4342,7 +4336,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5D_set_extent(H5D_t *dset, const hsize_t *size)
+H5D_set_extent(H5D_t *dset, const hsize_t *size, hid_t dxpl_id)
{
hsize_t curr_dims[H5O_LAYOUT_NDIMS]; /* Current dimension sizes */
int rank; /* Dataspace # of dimensions */
@@ -4394,12 +4388,12 @@ H5D_set_extent(H5D_t *dset, const hsize_t *size)
*-------------------------------------------------------------------------
*/
/* Save the new dataspace in the file if necessary */
- if(H5S_modify(&(dset->ent), space, TRUE) < 0)
+ if(H5S_modify(&(dset->ent), space, TRUE, dxpl_id) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to update file with new dataspace");
/* Allocate space for the new parts of the dataset, if appropriate */
if(expand && dset->alloc_time==H5D_ALLOC_TIME_EARLY)
- if(H5D_alloc_storage(dset->ent.file, dset, H5D_ALLOC_EXTEND, TRUE, FALSE) < 0)
+ if(H5D_alloc_storage(dset->ent.file, dxpl_id, dset, H5D_ALLOC_EXTEND, TRUE, FALSE) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset storage");
@@ -4414,11 +4408,11 @@ H5D_set_extent(H5D_t *dset, const hsize_t *size)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dset creation property list");
/* Remove excess chunks */
- if(H5F_istore_prune_by_extent(dset->ent.file, &dset->layout, space) < 0)
+ if(H5F_istore_prune_by_extent(dset->ent.file, dxpl_id, &dset->layout, space) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to remove chunks ");
/* Reset the elements outsize the new dimensions, but in existing chunks */
- if(H5F_istore_initialize_by_extent(dset->ent.file, &dset->layout, plist, space) < 0)
+ if(H5F_istore_initialize_by_extent(dset->ent.file, dxpl_id, &dset->layout, plist, space) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to initialize chunks ");
} /* end if */
} /* end if */
@@ -4448,7 +4442,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5D_flush(H5F_t *f)
+H5D_flush(H5F_t *f, hid_t dxpl_id)
{
unsigned num_dsets; /* Number of datasets in file */
hid_t *id_list=NULL; /* list of dataset IDs */
@@ -4473,7 +4467,7 @@ H5D_flush(H5F_t *f)
if(NULL==(dataset=H5I_object_verify(id_list[j], H5I_DATASET)))
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to get dataset object");
if(dataset->layout.type==H5D_COMPACT && dataset->layout.dirty)
- if(H5O_modify(&(dataset->ent), H5O_LAYOUT, 0, 0, 1, &(dataset->layout))<0)
+ if(H5O_modify(&(dataset->ent), H5O_LAYOUT, 0, 0, 1, &(dataset->layout), dxpl_id)<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to update layout message");
dataset->layout.dirty = FALSE;
}
@@ -4518,7 +4512,7 @@ H5Ddebug(hid_t dset_id, unsigned UNUSED flags)
/* Print B-tree information */
if (H5D_CHUNKED==dset->layout.type) {
- H5F_istore_dump_btree(dset->ent.file, stdout, dset->layout.ndims, dset->layout.addr);
+ H5F_istore_dump_btree(dset->ent.file, H5AC_dxpl_id, stdout, dset->layout.ndims, dset->layout.addr);
} else if (H5D_CONTIGUOUS==dset->layout.type) {
HDfprintf(stdout, " %-10s %a\n", "Address:", dset->layout.addr);
}
diff --git a/src/H5Distore.c b/src/H5Distore.c
index eefa690..ec233bf 100644
--- a/src/H5Distore.c
+++ b/src/H5Distore.c
@@ -108,23 +108,23 @@ typedef H5F_rdcc_ent_t *H5F_rdcc_ent_ptr_t; /* For free lists */
/* Private prototypes */
static size_t H5F_istore_sizeof_rkey(H5F_t *f, const void *_udata);
-static herr_t H5F_istore_new_node(H5F_t *f, H5B_ins_t, void *_lt_key,
+static herr_t H5F_istore_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t, void *_lt_key,
void *_udata, void *_rt_key,
haddr_t *addr_p /*out*/);
-static int H5F_istore_cmp2(H5F_t *f, void *_lt_key, void *_udata,
+static int H5F_istore_cmp2(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata,
void *_rt_key);
-static int H5F_istore_cmp3(H5F_t *f, void *_lt_key, void *_udata,
+static int H5F_istore_cmp3(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata,
void *_rt_key);
-static herr_t H5F_istore_found(H5F_t *f, haddr_t addr, const void *_lt_key,
+static herr_t H5F_istore_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_lt_key,
void *_udata, const void *_rt_key);
-static H5B_ins_t H5F_istore_insert(H5F_t *f, haddr_t addr, void *_lt_key,
+static H5B_ins_t H5F_istore_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
hbool_t *lt_key_changed, void *_md_key,
void *_udata, void *_rt_key,
hbool_t *rt_key_changed,
haddr_t *new_node/*out*/);
-static H5B_iterate_t H5F_istore_iter_allocated(H5F_t *f, void *left_key, haddr_t addr,
+static H5B_iterate_t H5F_istore_iter_allocated(H5F_t *f, hid_t dxpl_id, void *left_key, haddr_t addr,
void *right_key, void *_udata);
-static H5B_iterate_t H5F_istore_iter_dump(H5F_t *f, void *left_key, haddr_t addr,
+static H5B_iterate_t H5F_istore_iter_dump(H5F_t *f, hid_t dxpl_id, void *left_key, haddr_t addr,
void *right_key, void *_udata);
static herr_t H5F_istore_decode_key(H5F_t *f, H5B_t *bt, uint8_t *raw,
void *_key);
@@ -132,11 +132,11 @@ static herr_t H5F_istore_encode_key(H5F_t *f, H5B_t *bt, uint8_t *raw,
void *_key);
static herr_t H5F_istore_debug_key(FILE *stream, int indent, int fwidth,
const void *key, const void *udata);
-static haddr_t H5F_istore_get_addr(H5F_t *f, const H5O_layout_t *layout,
+static haddr_t H5F_istore_get_addr(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
const hssize_t offset[]);
-static H5B_iterate_t H5F_istore_prune_extent(H5F_t *f, void *_lt_key, haddr_t addr,
+static H5B_iterate_t H5F_istore_prune_extent(H5F_t *f, hid_t dxpl_id, void *_lt_key, haddr_t addr,
void *_rt_key, void *_udata);
-static H5B_ins_t H5F_istore_remove( H5F_t *f, haddr_t addr, void *_lt_key,
+static H5B_ins_t H5F_istore_remove( H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
hbool_t *lt_key_changed, void *_udata, void *_rt_key,
hbool_t *rt_key_changed);
@@ -387,7 +387,7 @@ done:
*-------------------------------------------------------------------------
*/
static int
-H5F_istore_cmp2(H5F_t UNUSED *f, void *_lt_key, void *_udata,
+H5F_istore_cmp2(H5F_t UNUSED *f, hid_t dxpl_id, void *_lt_key, void *_udata,
void *_rt_key)
{
H5F_istore_key_t *lt_key = (H5F_istore_key_t *) _lt_key;
@@ -440,7 +440,7 @@ done:
*-------------------------------------------------------------------------
*/
static int
-H5F_istore_cmp3(H5F_t UNUSED *f, void *_lt_key, void *_udata,
+H5F_istore_cmp3(H5F_t UNUSED *f, hid_t dxpl_id, void *_lt_key, void *_udata,
void *_rt_key)
{
H5F_istore_key_t *lt_key = (H5F_istore_key_t *) _lt_key;
@@ -489,7 +489,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_istore_new_node(H5F_t *f, H5B_ins_t op,
+H5F_istore_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t op,
void *_lt_key, void *_udata, void *_rt_key,
haddr_t *addr_p/*out*/)
{
@@ -511,7 +511,8 @@ H5F_istore_new_node(H5F_t *f, H5B_ins_t op,
/* Allocate new storage */
assert (udata->key.nbytes > 0);
- if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_DRAW, (hsize_t)udata->key.nbytes)))
+ H5_CHECK_OVERFLOW( udata->key.nbytes ,size_t, hsize_t);
+ if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->key.nbytes)))
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "couldn't allocate new file storage");
udata->addr = *addr_p;
@@ -573,7 +574,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_istore_found(H5F_t UNUSED *f, haddr_t addr, const void *_lt_key,
+H5F_istore_found(H5F_t UNUSED *f, hid_t dxpl_id, haddr_t addr, const void *_lt_key,
void *_udata, const void UNUSED *_rt_key)
{
H5F_istore_ud1_t *udata = (H5F_istore_ud1_t *) _udata;
@@ -641,7 +642,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_ins_t
-H5F_istore_insert(H5F_t *f, haddr_t addr, void *_lt_key,
+H5F_istore_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
hbool_t UNUSED *lt_key_changed,
void *_md_key, void *_udata, void *_rt_key,
hbool_t UNUSED *rt_key_changed,
@@ -668,7 +669,7 @@ H5F_istore_insert(H5F_t *f, haddr_t addr, void *_lt_key,
assert(rt_key_changed);
assert(new_node_p);
- cmp = H5F_istore_cmp3(f, lt_key, udata, rt_key);
+ cmp = H5F_istore_cmp3(f, dxpl_id, lt_key, udata, rt_key);
assert(cmp <= 0);
if (cmp < 0) {
@@ -698,9 +699,11 @@ H5F_istore_insert(H5F_t *f, haddr_t addr, void *_lt_key,
(hsize_t)lt_key->nbytes, (hsize_t)udata->key.nbytes)))
HGOTO_ERROR (H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "unable to reallocate chunk storage");
#else /* OLD_WAY */
- if (H5MF_xfree(f, H5FD_MEM_DRAW, addr,(hsize_t)lt_key->nbytes)<0)
+ H5_CHECK_OVERFLOW( lt_key->nbytes ,size_t, hsize_t);
+ if (H5MF_xfree(f, H5FD_MEM_DRAW, dxpl_id, addr, (hsize_t)lt_key->nbytes)<0)
HGOTO_ERROR(H5E_STORAGE, H5E_CANTFREE, H5B_INS_ERROR, "unable to free chunk");
- if (HADDR_UNDEF==(*new_node_p=H5MF_alloc(f, H5FD_MEM_DRAW, (hsize_t)udata->key.nbytes)))
+ H5_CHECK_OVERFLOW( udata->key.nbytes ,size_t, hsize_t);
+ if (HADDR_UNDEF==(*new_node_p=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->key.nbytes)))
HGOTO_ERROR(H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "unable to reallocate chunk");
#endif /* OLD_WAY */
lt_key->nbytes = udata->key.nbytes;
@@ -733,7 +736,8 @@ H5F_istore_insert(H5F_t *f, haddr_t addr, void *_lt_key,
/*
* Allocate storage for the new chunk
*/
- if (HADDR_UNDEF==(*new_node_p=H5MF_alloc(f, H5FD_MEM_DRAW, (hsize_t)udata->key.nbytes)))
+ H5_CHECK_OVERFLOW( udata->key.nbytes ,size_t, hsize_t);
+ if (HADDR_UNDEF==(*new_node_p=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->key.nbytes)))
HGOTO_ERROR(H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "file allocation failed");
udata->addr = *new_node_p;
ret_value = H5B_INS_RIGHT;
@@ -769,7 +773,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_iterate_t
-H5F_istore_iter_allocated (H5F_t UNUSED *f, void *_lt_key, haddr_t UNUSED addr,
+H5F_istore_iter_allocated (H5F_t UNUSED *f, hid_t dxpl_id, void *_lt_key, haddr_t UNUSED addr,
void UNUSED *_rt_key, void *_udata)
{
H5F_istore_ud1_t *bt_udata = (H5F_istore_ud1_t *)_udata;
@@ -805,7 +809,7 @@ H5F_istore_iter_allocated (H5F_t UNUSED *f, void *_lt_key, haddr_t UNUSED addr,
*-------------------------------------------------------------------------
*/
static H5B_iterate_t
-H5F_istore_iter_dump (H5F_t UNUSED *f, void *_lt_key, haddr_t UNUSED addr,
+H5F_istore_iter_dump (H5F_t UNUSED *f, hid_t dxpl_id, void *_lt_key, haddr_t UNUSED addr,
void UNUSED *_rt_key, void *_udata)
{
H5F_istore_ud1_t *bt_udata = (H5F_istore_ud1_t *)_udata;
@@ -890,7 +894,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_istore_flush_entry(H5F_t *f, H5F_rdcc_ent_t *ent, hbool_t reset)
+H5F_istore_flush_entry(H5F_t *f, hid_t dxpl_id, H5F_rdcc_ent_t *ent, hbool_t reset)
{
herr_t ret_value=SUCCEED; /*return value */
H5F_istore_ud1_t udata; /*pass through B-tree */
@@ -898,8 +902,6 @@ H5F_istore_flush_entry(H5F_t *f, H5F_rdcc_ent_t *ent, hbool_t reset)
void *buf=NULL; /*temporary buffer */
size_t alloc; /*bytes allocated for BUF */
hbool_t point_of_no_return = FALSE;
- H5Z_cb_t cb_struct={NULL,NULL};
- H5Z_EDC_t edc=H5Z_ENABLE_EDC;
FUNC_ENTER_NOINIT(H5F_istore_flush_entry);
@@ -921,6 +923,10 @@ H5F_istore_flush_entry(H5F_t *f, H5F_rdcc_ent_t *ent, hbool_t reset)
/* Should the chunk be filtered before writing it to disk? */
if (ent->pline && ent->pline->nfilters) {
+ H5P_genplist_t *plist; /* Data xfer property list */
+ H5Z_cb_t cb_struct;
+ H5Z_EDC_t edc;
+
if (!reset) {
/*
* Copy the chunk to a new buffer before running it through
@@ -947,6 +953,12 @@ H5F_istore_flush_entry(H5F_t *f, H5F_rdcc_ent_t *ent, hbool_t reset)
/* Don't know whether we should involve transfer property list. So
* just pass in H5Z_ENABLE_EDC and default callback setting for data
* read. */
+ if (NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list");
+ if(H5P_get(plist,H5D_XFER_EDC_NAME,&edc)<0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, NULL, "can't get edc information");
+ if(H5P_get(plist,H5D_XFER_FILTER_CB_NAME,&cb_struct)<0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, NULL, "can't get filter callback struct");
if (H5Z_pipeline(f, ent->pline, 0, &(udata.key.filter_mask), edc,
cb_struct, &(udata.key.nbytes), &alloc, &buf)<0) {
HGOTO_ERROR(H5E_PLINE, H5E_WRITEERROR, FAIL,
@@ -958,9 +970,9 @@ H5F_istore_flush_entry(H5F_t *f, H5F_rdcc_ent_t *ent, hbool_t reset)
* Create the chunk it if it doesn't exist, or reallocate the chunk if
* its size changed. Then write the data into the file.
*/
- if (H5B_insert(f, H5B_ISTORE, ent->layout->addr, ent->split_ratios, &udata)<0)
+ if (H5B_insert(f, dxpl_id, H5B_ISTORE, ent->layout->addr, ent->split_ratios, &udata)<0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to allocate chunk");
- if (H5F_block_write(f, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, H5P_DATASET_XFER_DEFAULT, buf)<0)
+ if (H5F_block_write(f, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, dxpl_id, buf)<0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file");
/* Mark cache entry as clean */
@@ -1018,7 +1030,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_istore_preempt(H5F_t *f, H5F_rdcc_ent_t * ent, hbool_t flush)
+H5F_istore_preempt(H5F_t *f, hid_t dxpl_id, H5F_rdcc_ent_t * ent, hbool_t flush)
{
H5F_rdcc_t *rdcc = &(f->shared->rdcc);
herr_t ret_value=SUCCEED; /* Return value */
@@ -1032,7 +1044,7 @@ H5F_istore_preempt(H5F_t *f, H5F_rdcc_ent_t * ent, hbool_t flush)
if(flush) {
/* Flush */
- if(H5F_istore_flush_entry(f, ent, TRUE) < 0)
+ if(H5F_istore_flush_entry(f, dxpl_id, ent, TRUE) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "cannot flush indexed storage buffer");
}
else {
@@ -1086,7 +1098,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_flush (H5F_t *f, hbool_t preempt)
+H5F_istore_flush (H5F_t *f, hid_t dxpl_id, hbool_t preempt)
{
H5F_rdcc_t *rdcc = &(f->shared->rdcc);
int nerrors=0;
@@ -1098,10 +1110,10 @@ H5F_istore_flush (H5F_t *f, hbool_t preempt)
for (ent=rdcc->head; ent; ent=next) {
next = ent->next;
if (preempt) {
- if (H5F_istore_preempt(f, ent, TRUE )<0)
+ if (H5F_istore_preempt(f, dxpl_id, ent, TRUE )<0)
nerrors++;
} else {
- if (H5F_istore_flush_entry(f, ent, FALSE)<0)
+ if (H5F_istore_flush_entry(f, dxpl_id, ent, FALSE)<0)
nerrors++;
}
}
@@ -1132,7 +1144,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_dest (H5F_t *f)
+H5F_istore_dest (H5F_t *f, hid_t dxpl_id)
{
H5F_rdcc_t *rdcc = &(f->shared->rdcc);
int nerrors=0;
@@ -1147,7 +1159,7 @@ H5F_istore_dest (H5F_t *f)
HDfflush(stderr);
#endif
next = ent->next;
- if (H5F_istore_preempt(f, ent, TRUE )<0)
+ if (H5F_istore_preempt(f, dxpl_id, ent, TRUE )<0)
nerrors++;
}
if (nerrors)
@@ -1180,7 +1192,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_istore_prune (H5F_t *f, size_t size)
+H5F_istore_prune (H5F_t *f, hid_t dxpl_id, size_t size)
{
int i, j, nerrors=0;
H5F_rdcc_t *rdcc = &(f->shared->rdcc);
@@ -1259,7 +1271,7 @@ H5F_istore_prune (H5F_t *f, size_t size)
if (n[j]==cur)
n[j] = cur->next;
}
- if (H5F_istore_preempt(f, cur, TRUE)<0)
+ if (H5F_istore_preempt(f, dxpl_id, cur, TRUE)<0)
nerrors++;
}
}
@@ -1331,7 +1343,7 @@ H5F_istore_lock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
herr_t status; /*func return status */
void *chunk=NULL; /*the file chunk */
void *ret_value; /*return value */
- H5P_genplist_t *plist=NULL; /* Property list */
+ H5P_genplist_t *plist; /* Property list */
H5Z_EDC_t edc;
H5Z_cb_t cb_struct;
@@ -1399,7 +1411,7 @@ H5F_istore_lock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
H5_ASSIGN_OVERFLOW(chunk_size,tempchunk_size,hsize_t,size_t);
udata.mesg = *layout;
udata.addr = HADDR_UNDEF;
- status = H5B_find (f, H5B_ISTORE, layout->addr, &udata);
+ status = H5B_find (f, dxpl_id, H5B_ISTORE, layout->addr, &udata);
H5E_clear ();
if (status>=0 && H5F_addr_defined(udata.addr)) {
@@ -1413,7 +1425,7 @@ H5F_istore_lock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
chunk_alloc = udata.key.nbytes;
if (NULL==(chunk = H5MM_malloc (chunk_alloc)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk");
- if (H5F_block_read(f, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, H5P_DATASET_XFER_DEFAULT, chunk)<0)
+ if (H5F_block_read(f, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, dxpl_id, chunk)<0)
HGOTO_ERROR (H5E_IO, H5E_READERROR, NULL, "unable to read raw data chunk");
if(H5P_get(plist,H5D_XFER_EDC_NAME,&edc)<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, NULL, "can't get edc information");
@@ -1459,11 +1471,10 @@ H5F_istore_lock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
HDputc('#', stderr);
HDfflush(stderr);
#endif
- if (H5F_istore_preempt(f, ent, TRUE)<0)
+ if (H5F_istore_preempt(f, dxpl_id, ent, TRUE)<0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk from cache");
}
-
- if (H5F_istore_prune(f, chunk_size)<0)
+ if (H5F_istore_prune(f, dxpl_id, chunk_size)<0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk(s) from cache");
/* Create a new entry */
@@ -1629,7 +1640,7 @@ H5F_istore_unlock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
assert(plist!=NULL);
H5P_get(plist,H5D_XFER_BTREE_SPLIT_RATIO_NAME,&(x.split_ratios));
- H5F_istore_flush_entry (f, &x, TRUE);
+ H5F_istore_flush_entry (f, dxpl_id, &x, TRUE);
} else {
if(chunk)
H5MM_xfree (chunk);
@@ -1763,7 +1774,7 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
}
/* Get the address of this chunk on disk */
- chunk_addr=H5F_istore_get_addr(f, layout, chunk_offset);
+ chunk_addr=H5F_istore_get_addr(f, dxpl_id, layout, chunk_offset);
/*
* If the chunk is too large to load into the cache and it has no
@@ -1800,8 +1811,7 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
for (u=l.ndims; u-- > 0; /*void*/)
l.dim[u] = layout->dim[u];
l.addr = chunk_addr;
- if (H5F_arr_read(f, H5P_DATASET_XFER_DEFAULT, &l, dc_plist,
- sub_size, size_m, sub_offset_m, offset_wrt_chunk, buf)<0)
+ if (H5F_arr_read(f, dxpl_id, &l, dc_plist, sub_size, size_m, sub_offset_m, offset_wrt_chunk, buf)<0)
HGOTO_ERROR (H5E_IO, H5E_READERROR, FAIL, "unable to read raw data from file");
} /* end if */
else {
@@ -1945,7 +1955,7 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
}
/* Get the address of this chunk on disk */
- chunk_addr=H5F_istore_get_addr(f, layout, chunk_offset);
+ chunk_addr=H5F_istore_get_addr(f, dxpl_id, layout, chunk_offset);
/*
* If the chunk is too large to load into the cache and it has no
@@ -1982,8 +1992,7 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
for (u=l.ndims; u-- > 0; /*void*/)
l.dim[u] = layout->dim[u];
l.addr = chunk_addr;
- if (H5F_arr_write(f, H5P_DATASET_XFER_DEFAULT, &l, dc_plist,
- sub_size, size_m, sub_offset_m, offset_wrt_chunk, buf)<0)
+ if (H5F_arr_write(f, dxpl_id, &l, dc_plist, sub_size, size_m, sub_offset_m, offset_wrt_chunk, buf)<0)
HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file");
} /* end if */
else {
@@ -2037,7 +2046,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_create(H5F_t *f, H5O_layout_t *layout /*out */ )
+H5F_istore_create(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout /*out */ )
{
H5F_istore_ud1_t udata;
#ifndef NDEBUG
@@ -2057,7 +2066,7 @@ H5F_istore_create(H5F_t *f, H5O_layout_t *layout /*out */ )
#endif
udata.mesg.ndims = layout->ndims;
- if (H5B_create(f, H5B_ISTORE, &udata, &(layout->addr)/*out*/) < 0)
+ if (H5B_create(f, dxpl_id, H5B_ISTORE, &udata, &(layout->addr)/*out*/) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "can't create B-tree");
done:
@@ -2085,7 +2094,7 @@ done:
*-------------------------------------------------------------------------
*/
hsize_t
-H5F_istore_allocated(H5F_t *f, unsigned ndims, haddr_t addr)
+H5F_istore_allocated(H5F_t *f, hid_t dxpl_id, unsigned ndims, haddr_t addr)
{
H5F_istore_ud1_t udata;
hsize_t ret_value; /* Return value */
@@ -2094,7 +2103,7 @@ H5F_istore_allocated(H5F_t *f, unsigned ndims, haddr_t addr)
HDmemset(&udata, 0, sizeof udata);
udata.mesg.ndims = ndims;
- if (H5B_iterate(f, H5B_ISTORE, H5F_istore_iter_allocated, addr, &udata)<0)
+ if (H5B_iterate(f, dxpl_id, H5B_ISTORE, H5F_istore_iter_allocated, addr, &udata)<0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to iterate over chunk B-tree");
/* Set return value */
@@ -2124,7 +2133,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_dump_btree(H5F_t *f, FILE *stream, unsigned ndims, haddr_t addr)
+H5F_istore_dump_btree(H5F_t *f, hid_t dxpl_id, FILE *stream, unsigned ndims, haddr_t addr)
{
H5F_istore_ud1_t udata;
herr_t ret_value=SUCCEED; /* Return value */
@@ -2136,7 +2145,7 @@ H5F_istore_dump_btree(H5F_t *f, FILE *stream, unsigned ndims, haddr_t addr)
udata.stream = stream;
if(stream)
HDfprintf(stream, " Address: %a\n",addr);
- if(H5B_iterate(f, H5B_ISTORE, H5F_istore_iter_dump, addr, &udata)<0)
+ if(H5B_iterate(f, dxpl_id, H5B_ISTORE, H5F_istore_iter_dump, addr, &udata)<0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to iterate over chunk B-tree");
done:
@@ -2225,7 +2234,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent,
+H5F_istore_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
int fwidth, int ndims)
{
H5F_istore_ud1_t udata;
@@ -2236,7 +2245,7 @@ H5F_istore_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent,
HDmemset (&udata, 0, sizeof udata);
udata.mesg.ndims = ndims;
- H5B_debug (f, addr, stream, indent, fwidth, H5B_ISTORE, &udata);
+ H5B_debug (f, dxpl_id, addr, stream, indent, fwidth, H5B_ISTORE, &udata);
done:
FUNC_LEAVE_NOAPI(ret_value);
@@ -2262,7 +2271,7 @@ done:
*-------------------------------------------------------------------------
*/
static haddr_t
-H5F_istore_get_addr(H5F_t *f, const H5O_layout_t *layout,
+H5F_istore_get_addr(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
const hssize_t offset[])
{
H5F_istore_ud1_t udata; /* Information about a chunk */
@@ -2282,7 +2291,7 @@ H5F_istore_get_addr(H5F_t *f, const H5O_layout_t *layout,
udata.addr = HADDR_UNDEF;
/* Go get the chunk information */
- if (H5B_find (f, H5B_ISTORE, layout->addr, &udata)<0) {
+ if (H5B_find (f, dxpl_id, H5B_ISTORE, layout->addr, &udata)<0) {
H5E_clear();
HGOTO_ERROR(H5E_BTREE,H5E_NOTFOUND,HADDR_UNDEF,"Can't locate chunk info");
} /* end if */
@@ -2478,7 +2487,7 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
while (carry==0) {
/* Check if the chunk exists yet on disk */
chunk_exists=1;
- if(H5F_istore_get_addr(f,layout,chunk_offset)==HADDR_UNDEF) {
+ if(H5F_istore_get_addr(f,dxpl_id,layout,chunk_offset)==HADDR_UNDEF) {
H5F_rdcc_t *rdcc = &(f->shared->rdcc); /*raw data chunk cache */
H5F_rdcc_ent_t *ent = NULL; /*cache entry */
@@ -2512,7 +2521,7 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
udata.key.offset[u] = chunk_offset[u];
/* Allocate the chunk with all processes */
- if (H5B_insert(f, H5B_ISTORE, layout->addr, split_ratios, &udata)<0)
+ if (H5B_insert(f, dxpl_id, H5B_ISTORE, layout->addr, split_ratios, &udata)<0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to allocate chunk");
/* Check if fill values should be written to blocks */
@@ -2673,7 +2682,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_prune_by_extent(H5F_t *f, const H5O_layout_t *layout, const H5S_t * space)
+H5F_istore_prune_by_extent(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, const H5S_t * space)
{
H5F_rdcc_t *rdcc = &(f->shared->rdcc); /*raw data chunk cache */
H5F_rdcc_ent_t *ent = NULL, *next = NULL; /*cache entry */
@@ -2726,7 +2735,7 @@ H5F_istore_prune_by_extent(H5F_t *f, const H5O_layout_t *layout, const H5S_t * s
#endif
/* Preempt the entry from the cache, but do not flush it to disk */
- if(H5F_istore_preempt(f, ent, FALSE) < 0)
+ if(H5F_istore_preempt(f, dxpl_id, ent, FALSE) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to preempt chunk");
}
}
@@ -2744,7 +2753,7 @@ H5F_istore_prune_by_extent(H5F_t *f, const H5O_layout_t *layout, const H5S_t * s
udata.mesg.dim[u] = layout->dim[u];
udata.dims = curr_dims;
- if(H5B_iterate(f, H5B_ISTORE, H5F_istore_prune_extent, layout->addr, &udata) < 0)
+ if(H5B_iterate(f, dxpl_id, H5B_ISTORE, H5F_istore_prune_extent, layout->addr, &udata) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to iterate over B-tree");
done:
@@ -2770,7 +2779,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_iterate_t
-H5F_istore_prune_extent(H5F_t *f, void *_lt_key, haddr_t UNUSED addr,
+H5F_istore_prune_extent(H5F_t *f, hid_t dxpl_id, void *_lt_key, haddr_t UNUSED addr,
void UNUSED *_rt_key, void *_udata)
{
H5F_istore_ud1_t *bt_udata = (H5F_istore_ud1_t *)_udata;
@@ -2802,7 +2811,7 @@ H5F_istore_prune_extent(H5F_t *f, void *_lt_key, haddr_t UNUSED addr,
udata.mesg = bt_udata->mesg;
/* Remove */
- if(H5B_remove(f, H5B_ISTORE, bt_udata->mesg.addr, &udata) < 0)
+ if(H5B_remove(f, dxpl_id, H5B_ISTORE, bt_udata->mesg.addr, &udata) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5B_ITER_ERROR, "unable to remove entry");
break;
} /* end if */
@@ -2831,7 +2840,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_ins_t
-H5F_istore_remove(H5F_t *f, haddr_t addr, void *_lt_key /*in,out */ ,
+H5F_istore_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key /*in,out */ ,
hbool_t *lt_key_changed /*out */ ,
void UNUSED * _udata /*in,out */ ,
void UNUSED * _rt_key /*in,out */ ,
@@ -2842,7 +2851,7 @@ H5F_istore_remove(H5F_t *f, haddr_t addr, void *_lt_key /*in,out */ ,
FUNC_ENTER_NOAPI(H5F_istore_remove,H5B_INS_ERROR);
- H5FD_free(f->shared->lf, H5FD_MEM_DRAW, addr, (hsize_t)lt_key->nbytes);
+ H5FD_free(f->shared->lf, H5FD_MEM_DRAW, dxpl_id, addr, (hsize_t)lt_key->nbytes);
*lt_key_changed = FALSE;
*rt_key_changed = FALSE;
@@ -2876,10 +2885,9 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_initialize_by_extent(H5F_t *f, const H5O_layout_t *layout,
+H5F_istore_initialize_by_extent(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
H5P_genplist_t *dc_plist, const H5S_t * space)
{
- hid_t dxpl_id; /*dataset transfer property list */
uint8_t *chunk = NULL; /*the file chunk */
unsigned idx_hint = 0; /*input value for H5F_istore_lock */
hssize_t chunk_offset[H5O_LAYOUT_NDIMS]; /*logical location of the chunks */
@@ -2930,9 +2938,6 @@ H5F_istore_initialize_by_extent(H5F_t *f, const H5O_layout_t *layout,
size[i] = curr_dims[i];
size[i] = layout->dim[i];
- /* Default dataset transfer property list */
- dxpl_id = H5P_DATASET_XFER_DEFAULT;
-
/* Create a data space for a chunk & set the extent */
if(NULL == (space_chunk = H5S_create(H5S_SIMPLE)))
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, "can't create simple dataspace");
diff --git a/src/H5Dprivate.h b/src/H5Dprivate.h
index 239a187..c3366f2 100644
--- a/src/H5Dprivate.h
+++ b/src/H5Dprivate.h
@@ -140,6 +140,10 @@
#define H5D_XFER_HYPER_VECTOR_SIZE_NAME "vec_size"
#define H5D_XFER_HYPER_VECTOR_SIZE_SIZE sizeof(size_t)
#define H5D_XFER_HYPER_VECTOR_SIZE_DEF 1024
+/* Definitions for I/O transfer mode property */
+#define H5D_XFER_IO_XFER_MODE_NAME "io_xfer_mode"
+#define H5D_XFER_IO_XFER_MODE_SIZE sizeof(H5FD_mpio_xfer_t)
+#define H5D_XFER_IO_XFER_MODE_DEF H5FD_MPIO_INDEPENDENT
/* Definitions for EDC property */
#define H5D_XFER_EDC_NAME "error-detecting"
#define H5D_XFER_EDC_SIZE sizeof(H5Z_EDC_t)
@@ -167,10 +171,8 @@ typedef struct H5D_t {
/* Functions defined in H5D.c */
H5_DLL herr_t H5D_init(void);
-H5_DLL hid_t H5D_open(H5G_entry_t *ent);
-H5_DLL herr_t H5D_close(H5D_t *dataset);
-H5_DLL htri_t H5D_isa(H5G_entry_t *ent);
-H5_DLL herr_t H5D_extend(H5D_t *dataset, const hsize_t *size);
+H5_DLL hid_t H5D_open(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL htri_t H5D_isa(H5G_entry_t *ent, hid_t dxpl_id);
H5_DLL H5G_entry_t *H5D_entof(H5D_t *dataset);
H5_DLL H5T_t *H5D_typeof(H5D_t *dset);
H5_DLL herr_t H5D_crt_copy(hid_t new_plist_t, hid_t old_plist_t,
@@ -180,7 +182,7 @@ H5_DLL herr_t H5D_xfer_create(hid_t dxpl_id, void *create_data);
H5_DLL herr_t H5D_xfer_copy(hid_t new_plist_id, hid_t old_plist_id,
void *copy_data);
H5_DLL herr_t H5D_xfer_close(hid_t dxpl_id, void *close_data);
-H5_DLL herr_t H5D_flush(H5F_t *f);
+H5_DLL herr_t H5D_flush(H5F_t *f, hid_t dxpl_id);
#endif
diff --git a/src/H5Dseq.c b/src/H5Dseq.c
index 15cb668..fddf48f 100644
--- a/src/H5Dseq.c
+++ b/src/H5Dseq.c
@@ -176,7 +176,6 @@ H5F_seq_readv(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
int i,j; /*counters */
#ifdef H5_HAVE_PARALLEL
H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT;
- H5P_genplist_t *plist=NULL; /* Property list */
#endif /* H5_HAVE_PARALLEL */
herr_t ret_value = SUCCEED; /* Return value */
@@ -191,32 +190,25 @@ H5F_seq_readv(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
#ifdef H5_HAVE_PARALLEL
- {
- H5FD_mpio_dxpl_t *dx;
+ /* Get the transfer mode for MPIO transfers */
+ if(IS_H5FD_MPIO(f)) {
hid_t driver_id; /* VFL driver ID */
+ H5P_genplist_t *plist; /* Property list */
- /* Get the transfer mode for MPIO transfers */
- if(IS_H5FD_MPIO(f)) {
- /* Get the plist structure */
- if(NULL == (plist = H5I_object(dxpl_id)))
- HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
-
- /* Get the driver ID */
- if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
-
- /* Check if we are using the MPIO driver (for the DXPL) */
- if(H5FD_MPIO==driver_id) {
- /* Get the driver information */
- if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
-
- /* Check if we are not using independent I/O */
- if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
- xfer_mode = dx->xfer_mode;
- } /* end if */
+ /* Get the plist structure */
+ if(NULL == (plist = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+ /* Get the driver ID */
+ if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+ HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
+
+ /* Check if we are using the MPIO driver (for the DXPL) */
+ if(H5FD_MPIO==driver_id) {
+ /* Get the transfer mode */
+ xfer_mode=H5P_peek_unsigned(plist, H5D_XFER_IO_XFER_MODE_NAME);
} /* end if */
- }
+ } /* end if */
/* Collective MPIO access is unsupported for non-contiguous datasets */
if (H5D_CHUNKED==layout->type && H5FD_MPIO_COLLECTIVE==xfer_mode)
@@ -563,7 +555,6 @@ H5F_seq_writev(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout,
int i,j; /*counters */
#ifdef H5_HAVE_PARALLEL
H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT;
- H5P_genplist_t *plist=NULL; /* Property list */
#endif /* H5_HAVE_PARALLEL */
herr_t ret_value = SUCCEED; /* Return value */
@@ -578,32 +569,25 @@ H5F_seq_writev(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout,
assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
#ifdef H5_HAVE_PARALLEL
- {
- H5FD_mpio_dxpl_t *dx;
+ /* Get the transfer mode for MPIO transfers */
+ if(IS_H5FD_MPIO(f)) {
hid_t driver_id; /* VFL driver ID */
+ H5P_genplist_t *plist=NULL; /* Property list */
+
+ /* Get the plist structure */
+ if(NULL == (plist = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+ /* Get the driver ID */
+ if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+ HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
- /* Get the transfer mode for MPIO transfers */
- if(IS_H5FD_MPIO(f)) {
- /* Get the plist structure */
- if(NULL == (plist = H5I_object(dxpl_id)))
- HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
-
- /* Get the driver ID */
- if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
-
- /* Check if we are using the MPIO driver (for the DXPL) */
- if(H5FD_MPIO==driver_id) {
- /* Get the driver information */
- if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
-
- /* Check if we are not using independent I/O */
- if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
- xfer_mode = dx->xfer_mode;
- } /* end if */
+ /* Check if we are using the MPIO driver (for the DXPL) */
+ if(H5FD_MPIO==driver_id) {
+ /* Get the transfer mode */
+ xfer_mode=H5P_peek_unsigned(plist, H5D_XFER_IO_XFER_MODE_NAME);
} /* end if */
- }
+ } /* end if */
/* Collective MPIO access is unsupported for non-contiguous datasets */
if (H5D_CHUNKED==layout->type && H5FD_MPIO_COLLECTIVE==xfer_mode)
diff --git a/src/H5F.c b/src/H5F.c
index 34c0dc0..3ca2c30 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -63,12 +63,19 @@ typedef struct H5F_olist_t {
} H5F_olist_t;
/* PRIVATE PROTOTYPES */
+static H5F_t *H5F_open(const char *name, unsigned flags, hid_t fcpl_id,
+ hid_t fapl_id, hid_t dxpl_id);
+static herr_t H5F_close(H5F_t *f);
+static herr_t H5F_close_all(void);
+#ifdef NOT_YET
+static herr_t H5F_flush_all(hbool_t invalidate);
+static int H5F_flush_all_cb(H5F_t *f, hid_t fid, const void *_invalidate);
+#endif /* NOT_YET */
static H5F_t *H5F_new(H5F_file_t *shared, hid_t fcpl_id, hid_t fapl_id);
-static herr_t H5F_dest(H5F_t *f);
-static herr_t H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
+static herr_t H5F_dest(H5F_t *f, hid_t dxpl_id);
+static herr_t H5F_flush(H5F_t *f, hid_t dxpl_id, H5F_scope_t scope, hbool_t invalidate,
hbool_t alloc_only, hbool_t closing);
-static haddr_t H5F_locate_signature(H5FD_t *file);
-static int H5F_flush_all_cb(H5F_t *f, hid_t fid, const void *_invalidate);
+static haddr_t H5F_locate_signature(H5FD_t *file, hid_t dxpl_id);
static herr_t H5F_get_objects(H5F_t *f, unsigned types, hid_t *obj_id_list,
unsigned *obj_id_count);
static herr_t H5F_get_objects_cb(void *obj_ptr, hid_t obj_id, void *key);
@@ -634,6 +641,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value);
}
+#ifdef NOT_YET
/*-------------------------------------------------------------------------
* Function: H5F_flush_all_cb
@@ -691,6 +699,7 @@ H5F_flush_all(hbool_t invalidate)
done:
FUNC_LEAVE_NOAPI(ret_value);
}
+#endif /* NOT_YET */
/*-------------------------------------------------------------------------
@@ -711,7 +720,7 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
+static herr_t
H5F_close_all(void)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -725,6 +734,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value);
}
+#ifdef NOT_YET
/*--------------------------------------------------------------------------
NAME
@@ -759,6 +769,7 @@ H5F_encode_length_unusual(const H5F_t *f, uint8_t **p, uint8_t *l)
#endif
}
+#endif /* NOT_YET */
/*-------------------------------------------------------------------------
@@ -1293,7 +1304,7 @@ H5F_equal(void *_haystack, hid_t UNUSED id, const void *_needle)
*-------------------------------------------------------------------------
*/
static haddr_t
-H5F_locate_signature(H5FD_t *file)
+H5F_locate_signature(H5FD_t *file, hid_t dxpl_id)
{
haddr_t addr, eoa;
uint8_t buf[H5F_SIGNATURE_LEN];
@@ -1318,7 +1329,7 @@ H5F_locate_signature(H5FD_t *file)
addr = (8==n) ? 0 : (haddr_t)1 << n;
if (H5FD_set_eoa(file, addr+H5F_SIGNATURE_LEN)<0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, HADDR_UNDEF, "unable to set EOA value for file signature");
- if (H5FD_read(file, H5FD_MEM_SUPER, H5P_DATASET_XFER_DEFAULT, addr, H5F_SIGNATURE_LEN, buf)<0)
+ if (H5FD_read(file, H5FD_MEM_SUPER, dxpl_id, addr, H5F_SIGNATURE_LEN, buf)<0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, HADDR_UNDEF, "unable to read file signature");
if (!HDmemcmp(buf, H5F_SIGNATURE, H5F_SIGNATURE_LEN))
break;
@@ -1379,7 +1390,7 @@ H5Fis_hdf5(const char *name)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to open file");
/* The file is an hdf5 file if the hdf5 file signature can be found */
- ret_value = (HADDR_UNDEF!=H5F_locate_signature(file));
+ ret_value = (HADDR_UNDEF!=H5F_locate_signature(file, H5AC_dxpl_id));
done:
/* Close the file */
@@ -1547,7 +1558,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_dest(H5F_t *f)
+H5F_dest(H5F_t *f, hid_t dxpl_id)
{
herr_t ret_value = SUCCEED;
@@ -1567,11 +1578,11 @@ H5F_dest(H5F_t *f)
H5FL_FREE(H5G_t,f->shared->root_grp);
f->shared->root_grp=NULL;
}
- if (H5AC_dest(f)) {
+ if (H5AC_dest(f, dxpl_id)) {
HERROR(H5E_FILE, H5E_CANTRELEASE, "problems closing file");
ret_value = FAIL; /*but keep going*/
}
- if (H5F_istore_dest (f)<0) {
+ if (H5F_istore_dest (f, dxpl_id)<0) {
HERROR(H5E_FILE, H5E_CANTRELEASE, "problems closing file");
ret_value = FAIL; /*but keep going*/
}
@@ -1702,8 +1713,8 @@ done:
*
*-------------------------------------------------------------------------
*/
-H5F_t *
-H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
+static H5F_t *
+H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, hid_t dxpl_id)
{
H5F_t *file=NULL; /*the success return value */
H5F_t *ret_value; /*actual return value */
@@ -1868,19 +1879,19 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
shared->boot_addr = userblock_size;
shared->base_addr = shared->boot_addr;
shared->consist_flags = 0x03;
- if (H5F_flush(file, H5F_SCOPE_LOCAL, FALSE, TRUE,FALSE)<0)
+ if (H5F_flush(file, dxpl_id, H5F_SCOPE_LOCAL, FALSE, TRUE,FALSE)<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to write file superblock");
/* Create and open the root group */
- if (H5G_mkroot(file, NULL)<0)
+ if (H5G_mkroot(file, dxpl_id, NULL)<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create/open root group");
} else if (1==shared->nrefs) {
/* Read the superblock if it hasn't been read before. */
- if (HADDR_UNDEF==(shared->boot_addr=H5F_locate_signature(lf)))
+ if (HADDR_UNDEF==(shared->boot_addr=H5F_locate_signature(lf,dxpl_id)))
HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, NULL, "unable to find file signature");
if (H5FD_set_eoa(lf, shared->boot_addr+fixed_size)<0 ||
- H5FD_read(lf, H5FD_MEM_SUPER, H5P_DATASET_XFER_DEFAULT, shared->boot_addr, fixed_size, buf)<0)
+ H5FD_read(lf, H5FD_MEM_SUPER, dxpl_id, shared->boot_addr, fixed_size, buf)<0)
HGOTO_ERROR(H5E_FILE, H5E_READERROR, NULL, "unable to read superblock");
/* Signature, already checked */
@@ -1968,7 +1979,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
H5G_SIZEOF_ENTRY(file); /*root group ptr*/
assert(variable_size<=sizeof(buf));
if (H5FD_set_eoa(lf, shared->boot_addr+fixed_size+variable_size)<0 ||
- H5FD_read(lf, H5FD_MEM_SUPER, H5P_DATASET_XFER_DEFAULT, shared->boot_addr+fixed_size, variable_size, &buf[fixed_size])<0)
+ H5FD_read(lf, H5FD_MEM_SUPER, dxpl_id, shared->boot_addr+fixed_size, variable_size, &buf[fixed_size])<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read superblock");
H5F_addr_decode(file, &p, &(shared->base_addr)/*out*/);
H5F_addr_decode(file, &p, &(shared->freespace_addr)/*out*/);
@@ -1989,7 +2000,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
if (H5F_addr_defined(shared->driver_addr)) {
haddr_t drv_addr = shared->base_addr + shared->driver_addr;
if (H5FD_set_eoa(lf, drv_addr+16)<0 ||
- H5FD_read(lf, H5FD_MEM_SUPER, H5P_DATASET_XFER_DEFAULT, drv_addr, 16, buf)<0)
+ H5FD_read(lf, H5FD_MEM_SUPER, dxpl_id, drv_addr, 16, buf)<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read driver information block");
p = buf;
@@ -2009,7 +2020,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
/* Read driver information and decode */
if (H5FD_set_eoa(lf, drv_addr+16+driver_size)<0 ||
- H5FD_read(lf, H5FD_MEM_SUPER, H5P_DATASET_XFER_DEFAULT, drv_addr+16, driver_size, &buf[16])<0)
+ H5FD_read(lf, H5FD_MEM_SUPER, dxpl_id, drv_addr+16, driver_size, &buf[16])<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read file driver information");
if (H5FD_sb_decode(lf, driver_name, &buf[16])<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to decode driver information");
@@ -2025,7 +2036,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
} /* end if */
/* Make sure we can open the root group */
- if (H5G_mkroot(file, &root_ent)<0)
+ if (H5G_mkroot(file, dxpl_id, &root_ent)<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read root group");
/*
@@ -2080,7 +2091,7 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
done:
if (!ret_value && file)
- H5F_dest(file); /* Don't indicate error here, to leave the error stack with the correct error */
+ H5F_dest(file, dxpl_id); /* Don't indicate error here, to leave the error stack with the correct error */
FUNC_LEAVE_NOAPI(ret_value);
}
@@ -2184,7 +2195,7 @@ H5Fcreate(const char *filename, unsigned flags, hid_t fcpl_id,
/*
* Create a new file or truncate an existing file.
*/
- if (NULL==(new_file=H5F_open(filename, flags, fcpl_id, fapl_id)))
+ if (NULL==(new_file=H5F_open(filename, flags, fcpl_id, fapl_id, H5AC_dxpl_id)))
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to create file");
/* Get an atom for the file */
@@ -2260,7 +2271,7 @@ H5Fopen(const char *filename, unsigned flags, hid_t fapl_id)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file access property list");
/* Open the file */
- if (NULL==(new_file=H5F_open(filename, flags, H5P_FILE_CREATE_DEFAULT, fapl_id)))
+ if (NULL==(new_file=H5F_open(filename, flags, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id)))
HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to open file");
/* Get an atom for the file */
@@ -2350,7 +2361,7 @@ H5Fflush(hid_t object_id, H5F_scope_t scope)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "object is not associated with a file");
/* Flush the file */
- if (H5F_flush(f, scope, FALSE, FALSE, FALSE)<0)
+ if (H5F_flush(f, H5AC_dxpl_id, scope, FALSE, FALSE, FALSE)<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "flush failed");
done:
@@ -2409,7 +2420,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
+H5F_flush(H5F_t *f, hid_t dxpl_id, H5F_scope_t scope, hbool_t invalidate,
hbool_t alloc_only, hbool_t closing)
{
uint8_t sbuf[1024]; /* Superblock encoding buffer */
@@ -2447,7 +2458,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
}
if (H5F_SCOPE_DOWN==scope) {
for (i=0; i<f->mtab.nmounts; i++) {
- if (H5F_flush(f->mtab.child[i].file, scope, invalidate, FALSE, closing)<0)
+ if (H5F_flush(f->mtab.child[i].file, dxpl_id, scope, invalidate, FALSE, closing)<0)
nerrors++;
}
}
@@ -2455,7 +2466,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
/* Avoid flushing buffers & caches when alloc_only set */
if(!alloc_only) {
/* flush any cached compact storage raw data */
- if (H5D_flush(f)<0)
+ if (H5D_flush(f, dxpl_id)<0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush dataset cache");
/* If we are invalidating everything (which only happens just before
@@ -2466,7 +2477,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
if(f->shared->lf->feature_flags&H5FD_FEAT_AGGREGATE_METADATA) {
/* Return the unused portion of the metadata block to a free list */
if(f->shared->lf->eoma!=0)
- if(H5FD_free(f->shared->lf,H5FD_MEM_DEFAULT,f->shared->lf->eoma,f->shared->lf->cur_meta_block_size)<0)
+ if(H5FD_free(f->shared->lf,H5FD_MEM_DEFAULT,dxpl_id,f->shared->lf->eoma,f->shared->lf->cur_meta_block_size)<0)
HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "can't free metadata block");
/* Reset metadata block information, just in case */
@@ -2476,7 +2487,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
if(f->shared->lf->feature_flags&H5FD_FEAT_AGGREGATE_SMALLDATA) {
/* Return the unused portion of the "small data" block to a free list */
if(f->shared->lf->eosda!=0)
- if(H5FD_free(f->shared->lf,H5FD_MEM_DRAW,f->shared->lf->eosda,f->shared->lf->cur_sdata_block_size)<0)
+ if(H5FD_free(f->shared->lf,H5FD_MEM_DRAW,dxpl_id,f->shared->lf->eosda,f->shared->lf->cur_sdata_block_size)<0)
HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "can't free 'small data' block");
/* Reset "small data" block information, just in case */
@@ -2488,7 +2499,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
/* flush the data sieve buffer, if we have a dirty one */
if(f->shared->sieve_buf && f->shared->sieve_dirty) {
/* Write dirty data sieve buffer to file */
- if (H5F_block_write(f, H5FD_MEM_DRAW, f->shared->sieve_loc, f->shared->sieve_size, H5P_DATASET_XFER_DEFAULT, f->shared->sieve_buf)<0)
+ if (H5F_block_write(f, H5FD_MEM_DRAW, f->shared->sieve_loc, f->shared->sieve_size, dxpl_id, f->shared->sieve_buf)<0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed");
/* Reset sieve buffer dirty flag */
@@ -2496,11 +2507,11 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
} /* end if */
/* flush the entire raw data cache */
- if (H5F_istore_flush (f, invalidate)<0)
+ if (H5F_istore_flush (f, dxpl_id, invalidate)<0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush raw data cache");
/* flush (and invalidate) the entire meta data cache */
- if (H5AC_flush(f, NULL, HADDR_UNDEF, invalidate)<0)
+ if (H5AC_flush(f, dxpl_id, NULL, HADDR_UNDEF, invalidate)<0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush meta data cache");
} /* end if */
@@ -2583,7 +2594,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
* format address zero.
*/
H5_CHECK_OVERFLOW(f->shared->base_addr,haddr_t,hsize_t);
- addr = H5FD_alloc(f->shared->lf, H5FD_MEM_SUPER,
+ addr = H5FD_alloc(f->shared->lf, H5FD_MEM_SUPER, dxpl_id,
((hsize_t)f->shared->base_addr + superblock_size + driver_size));
if (HADDR_UNDEF==addr)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to allocate file space for userblock and/or superblock");
@@ -2606,7 +2617,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
/* Compare with current checksums */
if(chksum!=f->shared->boot_chksum) {
/* Write superblock */
- if (H5FD_write(f->shared->lf, H5FD_MEM_SUPER, H5P_DATASET_XFER_DEFAULT, f->shared->boot_addr, superblock_size, sbuf)<0)
+ if (H5FD_write(f->shared->lf, H5FD_MEM_SUPER, dxpl_id, f->shared->boot_addr, superblock_size, sbuf)<0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write superblock");
/* Update checksum information if different */
@@ -2623,7 +2634,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
/* Compare with current checksums */
if(chksum!=f->shared->boot_chksum) {
/* Write driver information block */
- if (H5FD_write(f->shared->lf, H5FD_MEM_SUPER, H5P_DATASET_XFER_DEFAULT, f->shared->base_addr+superblock_size, driver_size, dbuf)<0)
+ if (H5FD_write(f->shared->lf, H5FD_MEM_SUPER, dxpl_id, f->shared->base_addr+superblock_size, driver_size, dbuf)<0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write driver information block");
/* Update checksum information if different */
@@ -2633,7 +2644,7 @@ H5F_flush(H5F_t *f, H5F_scope_t scope, hbool_t invalidate,
} /* end else */
/* Flush file buffers to disk */
- if (!alloc_only && H5FD_flush(f->shared->lf,closing)<0)
+ if (!alloc_only && H5FD_flush(f->shared->lf,dxpl_id,closing)<0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "low level flush failed");
/* Check flush errors for children - errors are already on the stack */
@@ -2676,7 +2687,7 @@ done:
* Modified to use the virtual file layer.
*-------------------------------------------------------------------------
*/
-herr_t
+static herr_t
H5F_close(H5F_t *f)
{
H5F_close_degree_t fc_degree; /* What action to take when closing the last file ID for a file */
@@ -2695,7 +2706,7 @@ H5F_close(H5F_t *f)
*/
if (f->nrefs>1) {
/* Decrement reference counts */
- if (H5F_dest(f)<0)
+ if (H5F_dest(f, H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file");
HGOTO_DONE(SUCCEED);
} /* end if */
@@ -2830,7 +2841,7 @@ H5F_close(H5F_t *f)
H5F_istore_stats(f, FALSE);
/* Flush and destroy all caches */
- if (H5F_flush(f, H5F_SCOPE_LOCAL, TRUE, FALSE, TRUE)<0)
+ if (H5F_flush(f, H5AC_dxpl_id, H5F_SCOPE_LOCAL, TRUE, FALSE, TRUE)<0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache");
} /* end if */
@@ -2839,7 +2850,7 @@ H5F_close(H5F_t *f)
* shared H5F_file_t struct. If the reference count for the H5F_file_t
* struct reaches zero then destroy it also.
*/
- if (H5F_dest(f)<0)
+ if (H5F_dest(f,H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file");
done:
@@ -2916,7 +2927,7 @@ done:
*/
static herr_t
H5F_mount(H5G_entry_t *loc, const char *name, H5F_t *child,
- hid_t UNUSED plist_id)
+ hid_t UNUSED plist_id, hid_t dxpl_id)
{
H5G_t *mount_point = NULL; /*mount point group */
H5G_entry_t *mp_ent = NULL; /*mount point symbol table entry*/
@@ -2940,7 +2951,7 @@ H5F_mount(H5G_entry_t *loc, const char *name, H5F_t *child,
*/
if (child->mtab.parent)
HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "file is already mounted");
- if (NULL==(mount_point=H5G_open(loc, name)))
+ if (NULL==(mount_point=H5G_open(loc, name, dxpl_id)))
HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "mount point not found");
parent = H5G_fileof(mount_point);
@@ -3037,7 +3048,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_unmount(H5G_entry_t *loc, const char *name)
+H5F_unmount(H5G_entry_t *loc, const char *name, hid_t dxpl_id)
{
H5G_t *mounted = NULL; /*mount point group */
H5G_entry_t *mnt_ent = NULL; /*mounted symbol table entry */
@@ -3058,7 +3069,7 @@ H5F_unmount(H5G_entry_t *loc, const char *name)
* If we get the root group and the file has a parent in the mount tree,
* then we must have found the mount point.
*/
- if (NULL==(mounted=H5G_open(loc, name)))
+ if (NULL==(mounted=H5G_open(loc, name, dxpl_id)))
HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "mount point not found");
child = H5G_fileof(mounted);
mnt_ent = H5G_entof(mounted);
@@ -3311,7 +3322,7 @@ H5Fmount(hid_t loc_id, const char *name, hid_t child_id, hid_t plist_id)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not property list");
/* Do the mount */
- if (H5F_mount(loc, name, child, plist_id)<0)
+ if (H5F_mount(loc, name, child, plist_id, H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "unable to mount file");
done:
@@ -3356,7 +3367,7 @@ H5Funmount(hid_t loc_id, const char *name)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name");
/* Unmount */
- if (H5F_unmount(loc, name)<0)
+ if (H5F_unmount(loc, name, H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "unable to unmount file");
done:
@@ -3940,7 +3951,7 @@ H5F_addr_pack(H5F_t UNUSED *f, haddr_t *addr_p/*out*/,
*-------------------------------------------------------------------------
*/
herr_t
-H5F_debug(H5F_t *f, haddr_t UNUSED addr, FILE * stream, int indent,
+H5F_debug(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, FILE * stream, int indent,
int fwidth)
{
hsize_t userblock_size;
@@ -4021,7 +4032,7 @@ H5F_debug(H5F_t *f, haddr_t UNUSED addr, FILE * stream, int indent,
"Root group symbol table entry:",
f->shared->root_grp ? "" : "(none)");
if (f->shared->root_grp) {
- H5G_ent_debug(f, H5G_entof(f->shared->root_grp), stream,
+ H5G_ent_debug(f, dxpl_id, H5G_entof(f->shared->root_grp), stream,
indent+3, MAX(0, fwidth-3), HADDR_UNDEF);
}
diff --git a/src/H5FD.c b/src/H5FD.c
index 7c2c701..c4ff8f8 100644
--- a/src/H5FD.c
+++ b/src/H5FD.c
@@ -33,7 +33,7 @@ static int interface_initialize_g = 0;
/* static prototypes */
static herr_t H5FD_init_interface(void);
static herr_t H5FD_free_cls(H5FD_class_t *cls);
-static haddr_t H5FD_real_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size);
+static haddr_t H5FD_real_alloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
/* Declare a free list to manage the H5FD_free_t struct */
H5FL_DEFINE(H5FD_free_t);
@@ -596,32 +596,34 @@ done:
*
*-------------------------------------------------------------------------
*/
-void *
-H5FD_dxpl_copy(hid_t driver_id, const void *old_dxpl)
+herr_t
+H5FD_dxpl_copy(hid_t driver_id, const void *old_dxpl, void **copied_dxpl)
{
void *new_dxpl = NULL;
H5FD_class_t *driver=NULL;
- void *ret_value; /* Return value */
+ herr_t ret_value=SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(H5FD_dxpl_copy, NULL);
+ FUNC_ENTER_NOAPI(H5FD_dxpl_copy, FAIL);
/* Check args */
if (NULL==(driver=H5I_object(driver_id)))
- HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a driver ID");
- if (!old_dxpl)
- HGOTO_DONE(NULL); /*but no error*/
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a driver ID");
- /* Allow the driver to copy or do it ourselves */
- if (driver->dxpl_copy) {
- new_dxpl = (driver->dxpl_copy)(old_dxpl);
- } else if (driver->dxpl_size>0) {
- new_dxpl = H5MM_malloc(driver->dxpl_size);
- HDmemcpy(new_dxpl, old_dxpl, driver->dxpl_size);
- } else
- HGOTO_ERROR(H5E_VFL, H5E_UNSUPPORTED, NULL, "no way to copy driver file access property list");
+ /* Copy old dxpl, if one exists */
+ if (old_dxpl) {
+ /* Allow the driver to copy or do it ourselves */
+ if (driver->dxpl_copy) {
+ new_dxpl = (driver->dxpl_copy)(old_dxpl);
+ } else if (driver->dxpl_size>0) {
+ new_dxpl = H5MM_malloc(driver->dxpl_size);
+ assert(new_dxpl);
+ HDmemcpy(new_dxpl, old_dxpl, driver->dxpl_size);
+ } else
+ HGOTO_ERROR(H5E_VFL, H5E_UNSUPPORTED, FAIL, "no way to copy driver file access property list");
+ } /* end if */
- /* Set return value */
- ret_value=new_dxpl;
+ /* Set copied value */
+ *copied_dxpl=new_dxpl;
done:
FUNC_LEAVE_NOAPI(ret_value);
@@ -1171,7 +1173,7 @@ done:
*-------------------------------------------------------------------------
*/
haddr_t
-H5FDalloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
+H5FDalloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
{
haddr_t ret_value = HADDR_UNDEF;
@@ -1185,9 +1187,14 @@ H5FDalloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, HADDR_UNDEF, "invalid request type");
if (size<=0)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, HADDR_UNDEF, "zero-size request");
+ if (H5P_DEFAULT == dxpl_id)
+ dxpl_id= H5P_DATASET_XFER_DEFAULT;
+ else
+ if (TRUE!=H5P_isa_class(dxpl_id,H5P_DATASET_XFER))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, HADDR_UNDEF, "not a data transfer property list");
/* Do the real work */
- if (HADDR_UNDEF==(ret_value=H5FD_alloc(file, type, size)))
+ if (HADDR_UNDEF==(ret_value=H5FD_alloc(file, type, dxpl_id, size)))
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "unable to allocate file memory");
done:
@@ -1214,7 +1221,7 @@ done:
*-------------------------------------------------------------------------
*/
haddr_t
-H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
+H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
{
haddr_t ret_value = HADDR_UNDEF;
H5FD_mem_t mapped_type;
@@ -1451,7 +1458,7 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
/* Check if the block asked for is too large for a metadata block */
if(size>=file->def_meta_block_size) {
/* Allocate more room for this new block the regular way */
- new_meta=H5FD_real_alloc(file,type,size);
+ new_meta=H5FD_real_alloc(file,type,dxpl_id,size);
/* Check if the new metadata is at the end of the current metadata block */
if(file->eoma+file->cur_meta_block_size==new_meta) {
@@ -1470,7 +1477,7 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
} /* end if */
else {
/* Allocate another metadata block */
- new_meta=H5FD_real_alloc(file,H5FD_MEM_DEFAULT,file->def_meta_block_size);
+ new_meta=H5FD_real_alloc(file,H5FD_MEM_DEFAULT,dxpl_id,file->def_meta_block_size);
/* Check if the new metadata is at the end of the current metadata block */
if(file->eoma+file->cur_meta_block_size==new_meta) {
@@ -1479,7 +1486,7 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
else {
/* Return the unused portion of the metadata block to a free list */
if(file->eoma!=0)
- if(H5FD_free(file,H5FD_MEM_DEFAULT,file->eoma,file->cur_meta_block_size)<0)
+ if(H5FD_free(file,H5FD_MEM_DEFAULT,dxpl_id,file->eoma,file->cur_meta_block_size)<0)
HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "can't free metadata block");
/* Point the metadata block at the newly allocated block */
@@ -1502,7 +1509,7 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
} /* end else */
} /* end if */
else { /* Allocate data the regular way */
- ret_value=H5FD_real_alloc(file,type,size);
+ ret_value=H5FD_real_alloc(file,type,dxpl_id,size);
} /* end else */
} /* end if */
else { /* Allocate "raw" data */
@@ -1519,7 +1526,7 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
/* Check if the block asked for is too large for the "small data" block */
if(size>=file->def_sdata_block_size) {
/* Allocate more room for this new block the regular way */
- new_data=H5FD_real_alloc(file,type,size);
+ new_data=H5FD_real_alloc(file,type,dxpl_id,size);
/* Check if the new raw data is at the end of the current "small data" block */
if(file->eosda+file->cur_sdata_block_size==new_data) {
@@ -1539,7 +1546,7 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
} /* end if */
else {
/* Allocate another "small data" block */
- new_data=H5FD_real_alloc(file,type,file->def_sdata_block_size);
+ new_data=H5FD_real_alloc(file,type,dxpl_id,file->def_sdata_block_size);
/* Check if the new raw data is at the end of the current "small data" block */
if(file->eosda+file->cur_sdata_block_size==new_data) {
@@ -1548,7 +1555,7 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
else {
/* Return the unused portion of the "small data" block to a free list */
if(file->eosda!=0)
- if(H5FD_free(file,H5FD_MEM_DRAW,file->eosda,file->cur_sdata_block_size)<0)
+ if(H5FD_free(file,H5FD_MEM_DRAW,dxpl_id,file->eosda,file->cur_sdata_block_size)<0)
HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "can't free 'small data' block");
/* Point the "small data" block at the newly allocated block */
@@ -1571,7 +1578,7 @@ H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
} /* end else */
} /* end if */
else { /* Allocate data the regular way */
- ret_value=H5FD_real_alloc(file,type,size);
+ ret_value=H5FD_real_alloc(file,type,dxpl_id,size);
} /* end else */
} /* end else */
@@ -1599,7 +1606,7 @@ done:
*-------------------------------------------------------------------------
*/
static haddr_t
-H5FD_real_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
+H5FD_real_alloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
{
haddr_t ret_value = HADDR_UNDEF;
@@ -1615,7 +1622,7 @@ H5FD_real_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
* marker
*/
if (file->cls->alloc) {
- ret_value = (file->cls->alloc)(file, type, size);
+ ret_value = (file->cls->alloc)(file, type, dxpl_id, size);
if (HADDR_UNDEF==ret_value)
HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "driver allocation request failed");
} else {
@@ -1653,7 +1660,7 @@ H5FD_real_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size)
/* Free the wasted memory */
if (wasted)
- H5FDfree(file, type, oldeoa, wasted);
+ H5FD_free(file, type, dxpl_id, oldeoa, wasted);
#ifdef H5F_DEBUG
if (file->alignment * file->threshold != 1 && H5DEBUG(F)) {
@@ -1692,7 +1699,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5FDfree(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size)
+H5FDfree(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -1704,9 +1711,14 @@ H5FDfree(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file pointer");
if (type<0 || type>=H5FD_MEM_NTYPES)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid request type");
+ if (H5P_DEFAULT == dxpl_id)
+ dxpl_id= H5P_DATASET_XFER_DEFAULT;
+ else
+ if (TRUE!=H5P_isa_class(dxpl_id,H5P_DATASET_XFER))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list");
/* Do the real work */
- if (H5FD_free(file, type, addr, size)<0)
+ if (H5FD_free(file, type, dxpl_id, addr, size)<0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "file deallocation request failed");
done:
@@ -1731,7 +1743,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5FD_free(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size)
+H5FD_free(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
{
H5FD_mem_t mapped_type;
herr_t ret_value=SUCCEED; /* Return value */
@@ -1812,7 +1824,7 @@ H5FD_free(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size)
H5_ASSIGN_OVERFLOW(tail_size,(file->accum_loc+file->accum_size)-tail_addr,haddr_t,size_t);
/* Write out the part of the accumulator after the block to free */
- if (H5FD_write(file, H5FD_MEM_DEFAULT, H5P_DATASET_XFER_DEFAULT, tail_addr, tail_size, file->meta_accum+(tail_addr-file->accum_loc))<0)
+ if (H5FD_write(file, H5FD_MEM_DEFAULT, dxpl_id, tail_addr, tail_size, file->meta_accum+(tail_addr-file->accum_loc))<0)
HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "file write request failed");
} /* end if */
@@ -1937,7 +1949,7 @@ H5FD_free(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size)
}
}
} else if (file->cls->free) {
- if ((file->cls->free)(file, type, addr, size)<0)
+ if ((file->cls->free)(file, type, dxpl_id, addr, size)<0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver free request failed");
} else {
/* leak memory */
@@ -1967,7 +1979,7 @@ done:
*-------------------------------------------------------------------------
*/
haddr_t
-H5FDrealloc(H5FD_t *file, H5FD_mem_t type, haddr_t old_addr, hsize_t old_size,
+H5FDrealloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr, hsize_t old_size,
hsize_t new_size)
{
haddr_t ret_value=HADDR_UNDEF;
@@ -1975,7 +1987,14 @@ H5FDrealloc(H5FD_t *file, H5FD_mem_t type, haddr_t old_addr, hsize_t old_size,
FUNC_ENTER_API(H5FDrealloc, HADDR_UNDEF);
H5TRACE5("a","xMtahh",file,type,old_addr,old_size,new_size);
- if (HADDR_UNDEF==(ret_value=H5FD_realloc(file, type, old_addr, old_size, new_size)))
+ /* Check args */
+ if (H5P_DEFAULT == dxpl_id)
+ dxpl_id= H5P_DATASET_XFER_DEFAULT;
+ else
+ if (TRUE!=H5P_isa_class(dxpl_id,H5P_DATASET_XFER))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, HADDR_UNDEF, "not a data transfer property list");
+
+ if (HADDR_UNDEF==(ret_value=H5FD_realloc(file, type, dxpl_id, old_addr, old_size, new_size)))
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "file reallocation request failed");
done:
@@ -2001,7 +2020,7 @@ done:
*-------------------------------------------------------------------------
*/
haddr_t
-H5FD_realloc(H5FD_t *file, H5FD_mem_t type, haddr_t old_addr, hsize_t old_size,
+H5FD_realloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr, hsize_t old_size,
hsize_t new_size)
{
haddr_t new_addr=old_addr;
@@ -2017,17 +2036,17 @@ H5FD_realloc(H5FD_t *file, H5FD_mem_t type, haddr_t old_addr, hsize_t old_size,
} else if (0==old_size) {
/* allocate memory */
assert(!H5F_addr_defined(old_addr));
- if (HADDR_UNDEF==(new_addr=H5FDalloc(file, type, new_size)))
+ if (HADDR_UNDEF==(new_addr=H5FD_alloc(file, type, dxpl_id, new_size)))
HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, HADDR_UNDEF, "file allocation failed");
} else if (0==new_size) {
/* free memory */
assert(H5F_addr_defined(old_addr));
- H5FDfree(file, type, old_addr, old_size);
+ H5FD_free(file, type, dxpl_id, old_addr, old_size);
new_addr = HADDR_UNDEF;
} else if (new_size<old_size) {
/* free the end of the block */
- H5FDfree(file, type, old_addr+old_size, old_size-new_size);
+ H5FD_free(file, type, dxpl_id, old_addr+old_size, old_size-new_size);
} else {
/* move memory to new location */
/* Note! This may fail if sizeof(hsize_t)>sizeof(size_t) and the
@@ -2036,23 +2055,23 @@ H5FD_realloc(H5FD_t *file, H5FD_mem_t type, haddr_t old_addr, hsize_t old_size,
* to move pieces of the realloced data through a fixed size buffer, etc.
* -QAK, 6/20/01
*/
- if (HADDR_UNDEF==(new_addr=H5FDalloc(file, type, new_size)))
+ if (HADDR_UNDEF==(new_addr=H5FD_alloc(file, type, dxpl_id, new_size)))
HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, HADDR_UNDEF, "file allocation failed");
H5_CHECK_OVERFLOW(old_size,hsize_t,size_t);
if (old_size>sizeof(_buf) && NULL==(buf=H5MM_malloc((size_t)old_size))) {
- H5FDfree(file, type, new_addr, new_size);
+ H5FD_free(file, type, dxpl_id, new_addr, new_size);
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "memory allocation failed");
}
- if (H5FDread(file, type, H5P_DEFAULT, old_addr, (size_t)old_size, buf)<0 ||
- H5FDwrite(file, type, H5P_DEFAULT, new_addr, (size_t)old_size, buf)<0) {
- H5FDfree(file, type, new_addr, new_size);
+ if (H5FD_read(file, type, dxpl_id, old_addr, (size_t)old_size, buf)<0 ||
+ H5FD_write(file, type, dxpl_id, new_addr, (size_t)old_size, buf)<0) {
+ H5FD_free(file, type, dxpl_id, new_addr, new_size);
H5MM_xfree(buf);
HGOTO_ERROR(H5E_FILE, H5E_READERROR, HADDR_UNDEF, "unable to move file block");
}
if (buf!=_buf)
H5MM_xfree(buf);
- H5FDfree(file, type, old_addr, old_size);
+ H5FD_free(file, type, dxpl_id, old_addr, old_size);
}
/* Set return value */
@@ -2846,7 +2865,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5FDflush(H5FD_t *file, unsigned closing)
+H5FDflush(H5FD_t *file, hid_t dxpl_id, unsigned closing)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -2856,9 +2875,14 @@ H5FDflush(H5FD_t *file, unsigned closing)
/* Check args */
if (!file || !file->cls)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file pointer");
+ if (H5P_DEFAULT == dxpl_id)
+ dxpl_id= H5P_DATASET_XFER_DEFAULT;
+ else
+ if (TRUE!=H5P_isa_class(dxpl_id,H5P_DATASET_XFER))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list");
/* Do the real work */
- if (H5FD_flush(file,closing)<0)
+ if (H5FD_flush(file,dxpl_id,closing)<0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "file flush request failed");
done:
@@ -2885,7 +2909,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5FD_flush(H5FD_t *file, unsigned closing)
+H5FD_flush(H5FD_t *file, hid_t dxpl_id, unsigned closing)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -2897,14 +2921,14 @@ H5FD_flush(H5FD_t *file, unsigned closing)
if((file->feature_flags&H5FD_FEAT_ACCUMULATE_METADATA) && file->accum_dirty && file->accum_size>0) {
/* Flush the metadata contents */
/* Not certain if the type and dxpl should be the way they are... -QAK */
- if ((file->cls->write)(file, H5FD_MEM_DEFAULT, H5P_DATASET_XFER_DEFAULT, file->accum_loc, file->accum_size, file->meta_accum)<0)
+ if ((file->cls->write)(file, H5FD_MEM_DEFAULT, dxpl_id, file->accum_loc, file->accum_size, file->meta_accum)<0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver write request failed");
/* Reset the dirty flag */
file->accum_dirty=FALSE;
} /* end if */
- if (file->cls->flush && (file->cls->flush)(file,closing)<0)
+ if (file->cls->flush && (file->cls->flush)(file,dxpl_id,closing)<0)
HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver flush request failed");
done:
diff --git a/src/H5FDcore.c b/src/H5FDcore.c
index fc56096..9ea8ada 100644
--- a/src/H5FDcore.c
+++ b/src/H5FDcore.c
@@ -78,7 +78,6 @@ typedef struct H5FD_core_fapl_t {
static void *H5FD_core_fapl_get(H5FD_t *_file);
static H5FD_t *H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
haddr_t maxaddr);
-static herr_t H5FD_core_flush(H5FD_t *_file, unsigned closing);
static herr_t H5FD_core_close(H5FD_t *_file);
static int H5FD_core_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
static haddr_t H5FD_core_get_eoa(H5FD_t *_file);
@@ -89,6 +88,7 @@ static herr_t H5FD_core_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, hadd
size_t size, void *buf);
static herr_t H5FD_core_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
size_t size, const void *buf);
+static herr_t H5FD_core_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
static const H5FD_class_t H5FD_core_g = {
"core", /*name */
@@ -370,59 +370,6 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5FD_core_flush
- *
- * Purpose: Flushes the file to backing store if there is any and if the
- * dirty flag is set.
- *
- * Return: Success: 0
- *
- * Failure: -1
- *
- * Programmer: Robb Matzke
- * Friday, October 15, 1999
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5FD_core_flush(H5FD_t *_file, unsigned UNUSED closing)
-{
- H5FD_core_t *file = (H5FD_core_t*)_file;
- herr_t ret_value=SUCCEED; /* Return value */
-
- FUNC_ENTER_NOAPI(H5FD_core_flush, FAIL);
-
- /* Write to backing store */
- if (file->dirty && file->fd>=0) {
- haddr_t size = file->eof;
- unsigned char *ptr = file->mem;
-
- if (0!=HDlseek(file->fd, (off_t)0, SEEK_SET))
- HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "error seeking in backing store");
-
- while (size) {
- ssize_t n;
-
- H5_CHECK_OVERFLOW(size,hsize_t,size_t);
- n = HDwrite(file->fd, ptr, (size_t)size);
- if (n<0 && EINTR==errno)
- continue;
- if (n<0)
- HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "error writing backing store");
- ptr += (size_t)n;
- size -= (size_t)n;
- }
- file->dirty = FALSE;
- }
-
-done:
- FUNC_LEAVE_NOAPI(ret_value);
-}
-
-
-/*-------------------------------------------------------------------------
* Function: H5FD_core_close
*
* Purpose: Closes the file.
@@ -448,10 +395,6 @@ H5FD_core_close(H5FD_t *_file)
FUNC_ENTER_NOAPI(H5FD_core_close, FAIL);
- /* Flush */
- if (H5FD_core_flush(_file,TRUE)<0)
- HGOTO_ERROR(H5E_FILE, H5E_CANTFLUSH, FAIL, "unable to flush file");
-
/* Release resources */
if (file->fd>=0)
HDclose(file->fd);
@@ -790,3 +733,57 @@ H5FD_core_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, had
done:
FUNC_LEAVE_NOAPI(ret_value);
}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5FD_core_flush
+ *
+ * Purpose: Flushes the file to backing store if there is any and if the
+ * dirty flag is set.
+ *
+ * Return: Success: 0
+ *
+ * Failure: -1
+ *
+ * Programmer: Robb Matzke
+ * Friday, October 15, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_core_flush(H5FD_t *_file, hid_t dxpl_id, unsigned UNUSED closing)
+{
+ H5FD_core_t *file = (H5FD_core_t*)_file;
+ herr_t ret_value=SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(H5FD_core_flush, FAIL);
+
+ /* Write to backing store */
+ if (file->dirty && file->fd>=0) {
+ haddr_t size = file->eof;
+ unsigned char *ptr = file->mem;
+
+ if (0!=HDlseek(file->fd, (off_t)0, SEEK_SET))
+ HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "error seeking in backing store");
+
+ while (size) {
+ ssize_t n;
+
+ H5_CHECK_OVERFLOW(size,hsize_t,size_t);
+ n = HDwrite(file->fd, ptr, (size_t)size);
+ if (n<0 && EINTR==errno)
+ continue;
+ if (n<0)
+ HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "error writing backing store");
+ ptr += (size_t)n;
+ size -= (size_t)n;
+ }
+ file->dirty = FALSE;
+ }
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value);
+}
+
diff --git a/src/H5FDfamily.c b/src/H5FDfamily.c
index 831b60c..f181582 100644
--- a/src/H5FDfamily.c
+++ b/src/H5FDfamily.c
@@ -82,7 +82,7 @@ static herr_t H5FD_family_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, ha
size_t size, void *_buf/*out*/);
static herr_t H5FD_family_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
size_t size, const void *_buf);
-static herr_t H5FD_family_flush(H5FD_t *_file,unsigned closing);
+static herr_t H5FD_family_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
/* The class struct */
static const H5FD_class_t H5FD_family_g = {
@@ -1117,7 +1117,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_family_flush(H5FD_t *_file, unsigned closing)
+H5FD_family_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing)
{
H5FD_family_t *file = (H5FD_family_t*)_file;
int i, nerrors=0;
@@ -1126,7 +1126,7 @@ H5FD_family_flush(H5FD_t *_file, unsigned closing)
FUNC_ENTER_NOAPI(H5FD_family_flush, FAIL);
for (i=0; i<file->nmembs; i++)
- if (file->memb[i] && H5FDflush(file->memb[i],closing)<0)
+ if (file->memb[i] && H5FDflush(file->memb[i], dxpl_id, closing)<0)
nerrors++;
if (nerrors)
diff --git a/src/H5FDlog.c b/src/H5FDlog.c
index 736695d..ecf98ce 100644
--- a/src/H5FDlog.c
+++ b/src/H5FDlog.c
@@ -166,7 +166,7 @@ static H5FD_t *H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id,
static herr_t H5FD_log_close(H5FD_t *_file);
static int H5FD_log_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
static herr_t H5FD_log_query(const H5FD_t *_f1, unsigned long *flags);
-static haddr_t H5FD_log_alloc(H5FD_t *_file, H5FD_mem_t type, hsize_t size);
+static haddr_t H5FD_log_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
static haddr_t H5FD_log_get_eoa(H5FD_t *_file);
static herr_t H5FD_log_set_eoa(H5FD_t *_file, haddr_t addr);
static haddr_t H5FD_log_get_eof(H5FD_t *_file);
@@ -175,7 +175,7 @@ static herr_t H5FD_log_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr
size_t size, void *buf);
static herr_t H5FD_log_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
size_t size, const void *buf);
-static herr_t H5FD_log_flush(H5FD_t *_file, unsigned closing);
+static herr_t H5FD_log_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
/*
* The free list map which causes each request type to use no free lists
@@ -610,9 +610,6 @@ H5FD_log_close(H5FD_t *_file)
FUNC_ENTER_NOAPI(H5FD_log_close, FAIL);
- if (H5FD_log_flush(_file,TRUE)<0)
- HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to flush file");
-
#ifdef H5_HAVE_GETTIMEOFDAY
if(file->fa.flags&H5FD_LOG_TIME_CLOSE)
HDgettimeofday(&timeval_start,NULL);
@@ -823,7 +820,7 @@ done:
*-------------------------------------------------------------------------
*/
static haddr_t
-H5FD_log_alloc(H5FD_t *_file, H5FD_mem_t type, hsize_t size)
+H5FD_log_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
{
H5FD_log_t *file = (H5FD_log_t*)_file;
haddr_t addr;
@@ -1299,7 +1296,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_log_flush(H5FD_t *_file, unsigned UNUSED closing)
+H5FD_log_flush(H5FD_t *_file, hid_t dxpl_id, unsigned UNUSED closing)
{
H5FD_log_t *file = (H5FD_log_t*)_file;
herr_t ret_value=SUCCEED; /* Return value */
diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c
index fadb298..6f49e24 100644
--- a/src/H5FDmpio.c
+++ b/src/H5FDmpio.c
@@ -28,6 +28,7 @@
*/
#include "H5private.h" /*library functions */
#include "H5ACprivate.h" /* Metadata cache */
+#include "H5Dprivate.h" /* Dataset functions */
#include "H5Eprivate.h" /*error handling */
#include "H5Fprivate.h" /*files */
#include "H5FDprivate.h" /*file driver */
@@ -83,7 +84,7 @@ static herr_t H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, hadd
size_t size, void *buf);
static herr_t H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
size_t size, const void *buf);
-static herr_t H5FD_mpio_flush(H5FD_t *_file, unsigned closing);
+static herr_t H5FD_mpio_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
/* MPIO-specific file access properties */
typedef struct H5FD_mpio_fapl_t {
@@ -103,7 +104,7 @@ static const H5FD_class_t H5FD_mpio_g = {
H5FD_mpio_fapl_get, /*fapl_get */
NULL, /*fapl_copy */
NULL, /*fapl_free */
- sizeof(H5FD_mpio_dxpl_t), /*dxpl_size */
+ 0, /*dxpl_size */
NULL, /*dxpl_copy */
NULL, /*dxpl_free */
H5FD_mpio_open, /*open */
@@ -377,7 +378,6 @@ done:
herr_t
H5Pset_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t xfer_mode)
{
- H5FD_mpio_dxpl_t dx;
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value;
@@ -393,10 +393,12 @@ H5Pset_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t xfer_mode)
if (H5FD_MPIO_INDEPENDENT!=xfer_mode && H5FD_MPIO_COLLECTIVE!=xfer_mode)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "incorrect xfer_mode");
- /* Initialize driver-specific properties */
- dx.xfer_mode = xfer_mode;
+ /* Set the transfer mode */
+ if (H5P_set(plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
- ret_value= H5P_set_driver(plist, H5FD_MPIO, &dx);
+ /* Initialize driver-specific properties */
+ ret_value= H5P_set_driver(plist, H5FD_MPIO, NULL);
done:
FUNC_LEAVE_API(ret_value);
@@ -426,7 +428,6 @@ done:
herr_t
H5Pget_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t *xfer_mode/*out*/)
{
- H5FD_mpio_dxpl_t *dx;
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value=SUCCEED; /* Return value */
@@ -437,11 +438,11 @@ H5Pget_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t *xfer_mode/*out*/)
HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dxpl");
if (H5FD_MPIO!=H5P_get_driver(plist))
HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver");
- if (NULL==(dx=H5P_get_driver_info(plist)))
- HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info");
+ /* Get the transfer mode */
if (xfer_mode)
- *xfer_mode = dx->xfer_mode;
+ if (H5P_get(plist,H5D_XFER_IO_XFER_MODE_NAME,xfer_mode)<0)
+ HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to get value");
done:
FUNC_LEAVE_API(ret_value);
@@ -1299,15 +1300,14 @@ H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id, haddr_t add
void *buf/*out*/)
{
H5FD_mpio_t *file = (H5FD_mpio_t*)_file;
- const H5FD_mpio_dxpl_t *dx=NULL;
- H5FD_mpio_dxpl_t _dx;
MPI_Offset mpi_off, mpi_disp;
MPI_Status mpi_stat;
int mpi_code; /* mpi return code */
MPI_Datatype buf_type, file_type;
int size_i, bytes_read, n;
unsigned use_view_this_time=0;
- H5P_genplist_t *plist; /* Property list pointer */
+ H5P_genplist_t *plist; /* Property list pointer */
+ H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT; /* I/O tranfer mode */
herr_t ret_value=SUCCEED;
FUNC_ENTER_NOAPI(H5FD_mpio_read, FAIL);
@@ -1342,13 +1342,10 @@ H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id, haddr_t add
/* Obtain the data transfer properties */
if(NULL == (plist = H5I_object(dxpl_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list");
- if (H5FD_MPIO!=H5P_get_driver(plist)) {
- _dx.xfer_mode = H5FD_MPIO_INDEPENDENT; /*the default*/
- dx = &_dx;
- } else {
- dx = H5P_get_driver_info(plist);
- assert(dx);
- }
+ if (H5FD_MPIO==H5P_get_driver(plist)) {
+ /* Get the transfer mode */
+ xfer_mode=H5P_peek_unsigned(plist, H5D_XFER_IO_XFER_MODE_NAME);
+ } /* end if */
/*
* Set up for a fancy xfer using complex types, or single byte block. We
@@ -1393,8 +1390,8 @@ H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id, haddr_t add
} /* end if */
/* Read the data. */
- assert(H5FD_MPIO_INDEPENDENT==dx->xfer_mode || H5FD_MPIO_COLLECTIVE==dx->xfer_mode);
- if (H5FD_MPIO_INDEPENDENT==dx->xfer_mode) {
+ assert(H5FD_MPIO_INDEPENDENT==xfer_mode || H5FD_MPIO_COLLECTIVE==xfer_mode);
+ if (H5FD_MPIO_INDEPENDENT==xfer_mode) {
if (MPI_SUCCESS!= (mpi_code=MPI_File_read_at(file->f, mpi_off, buf, size_i, buf_type, &mpi_stat)))
HMPI_GOTO_ERROR(FAIL, "MPI_File_read_at failed", mpi_code);
} else {
@@ -1609,8 +1606,6 @@ H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
size_t size, const void *buf)
{
H5FD_mpio_t *file = (H5FD_mpio_t*)_file;
- const H5FD_mpio_dxpl_t *dx=NULL;
- H5FD_mpio_dxpl_t _dx;
MPI_Offset mpi_off, mpi_disp;
MPI_Status mpi_stat;
MPI_Datatype buf_type, file_type;
@@ -1618,7 +1613,8 @@ H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
int size_i, bytes_written;
unsigned use_view_this_time=0;
unsigned block_before_meta_write=0; /* Whether to block before a metadata write */
- H5P_genplist_t *plist; /* Property list pointer */
+ H5P_genplist_t *plist; /* Property list pointer */
+ H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT; /* I/O tranfer mode */
herr_t ret_value=SUCCEED;
FUNC_ENTER_NOAPI(H5FD_mpio_write, FAIL);
@@ -1653,13 +1649,10 @@ H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
/* Obtain the data transfer properties */
if(NULL == (plist = H5I_object(dxpl_id)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list");
- if (H5FD_MPIO!=H5P_get_driver(plist)) {
- _dx.xfer_mode = H5FD_MPIO_INDEPENDENT; /*the default*/
- dx = &_dx;
- } else {
- dx = H5P_get_driver_info(plist);
- assert(dx);
- }
+ if (H5FD_MPIO==H5P_get_driver(plist)) {
+ /* Get the transfer mode */
+ xfer_mode=H5P_peek_unsigned(plist, H5D_XFER_IO_XFER_MODE_NAME);
+ } /* end if */
/*
* Set up for a fancy xfer using complex types, or single byte block. We
@@ -1735,8 +1728,8 @@ H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
} /* end if */
/* Write the data. */
- assert(H5FD_MPIO_INDEPENDENT==dx->xfer_mode || H5FD_MPIO_COLLECTIVE==dx->xfer_mode);
- if (H5FD_MPIO_INDEPENDENT==dx->xfer_mode) {
+ assert(H5FD_MPIO_INDEPENDENT==xfer_mode || H5FD_MPIO_COLLECTIVE==xfer_mode);
+ if (H5FD_MPIO_INDEPENDENT==xfer_mode) {
/*OKAY: CAST DISCARDS CONST QUALIFIER*/
if (MPI_SUCCESS != (mpi_code=MPI_File_write_at(file->f, mpi_off, (void*)buf, size_i, buf_type, &mpi_stat)))
HMPI_GOTO_ERROR(FAIL, "MPI_File_write_at failed", mpi_code);
@@ -1860,7 +1853,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_mpio_flush(H5FD_t *_file, unsigned closing)
+H5FD_mpio_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing)
{
H5FD_mpio_t *file = (H5FD_mpio_t*)_file;
int mpi_code; /* mpi return code */
diff --git a/src/H5FDmpio.h b/src/H5FDmpio.h
index de55ccb..be66735 100644
--- a/src/H5FDmpio.h
+++ b/src/H5FDmpio.h
@@ -25,15 +25,6 @@ typedef enum H5FD_mpio_xfer_t {
H5FD_MPIO_COLLECTIVE
} H5FD_mpio_xfer_t;
-/*
- * MPIO-specific data transfer properties. This struct is here only because
- * we need it in special case code throughout the library. Applications
- * please use H5Pset_dxpl_mpio() instead.
- */
-typedef struct H5FD_mpio_dxpl_t {
- H5FD_mpio_xfer_t xfer_mode; /*collective or independent I/O */
-} H5FD_mpio_dxpl_t;
-
/* Macros */
#define IS_H5FD_MPIO(f) /* (H5F_t *f) */ \
diff --git a/src/H5FDmpiposix.c b/src/H5FDmpiposix.c
index 783beba..ee566e7 100644
--- a/src/H5FDmpiposix.c
+++ b/src/H5FDmpiposix.c
@@ -179,7 +179,7 @@ static herr_t H5FD_mpiposix_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id,
size_t size, void *buf);
static herr_t H5FD_mpiposix_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
size_t size, const void *buf);
-static herr_t H5FD_mpiposix_flush(H5FD_t *_file, unsigned closing);
+static herr_t H5FD_mpiposix_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
/* MPIPOSIX-specific file access properties */
typedef struct H5FD_mpiposix_fapl_t {
@@ -1266,7 +1266,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_mpiposix_flush(H5FD_t *_file, unsigned UNUSED closing)
+H5FD_mpiposix_flush(H5FD_t *_file, hid_t dxpl_id, unsigned UNUSED closing)
{
H5FD_mpiposix_t *file = (H5FD_mpiposix_t*)_file;
#ifdef WIN32
diff --git a/src/H5FDmulti.c b/src/H5FDmulti.c
index 45ee689..c16c43a 100644
--- a/src/H5FDmulti.c
+++ b/src/H5FDmulti.c
@@ -123,14 +123,14 @@ static haddr_t H5FD_multi_get_eoa(H5FD_t *_file);
static herr_t H5FD_multi_set_eoa(H5FD_t *_file, haddr_t eoa);
static haddr_t H5FD_multi_get_eof(H5FD_t *_file);
static herr_t H5FD_multi_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
-static haddr_t H5FD_multi_alloc(H5FD_t *_file, H5FD_mem_t type, hsize_t size);
-static herr_t H5FD_multi_free(H5FD_t *_file, H5FD_mem_t type, haddr_t addr,
+static haddr_t H5FD_multi_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+static herr_t H5FD_multi_free(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
hsize_t size);
static herr_t H5FD_multi_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
size_t size, void *_buf/*out*/);
static herr_t H5FD_multi_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
size_t size, const void *_buf);
-static herr_t H5FD_multi_flush(H5FD_t *_file, unsigned closing);
+static herr_t H5FD_multi_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
/* The class struct */
static const H5FD_class_t H5FD_multi_g = {
@@ -1267,10 +1267,6 @@ H5FD_multi_close(H5FD_t *_file)
/* Clear the error stack */
H5Eclear();
- /* Flush our own data */
- if (H5FD_multi_flush(_file,TRUE)<0)
- nerrors++;
-
/* Close as many members as possible */
ALL_MEMBERS(mt) {
if (file->memb[mt]) {
@@ -1579,7 +1575,7 @@ H5FD_multi_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle)
*-------------------------------------------------------------------------
*/
static haddr_t
-H5FD_multi_alloc(H5FD_t *_file, H5FD_mem_t type, hsize_t size)
+H5FD_multi_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
{
H5FD_multi_t *file = (H5FD_multi_t*)_file;
H5FD_mem_t mmt;
@@ -1589,7 +1585,7 @@ H5FD_multi_alloc(H5FD_t *_file, H5FD_mem_t type, hsize_t size)
mmt = file->fa.memb_map[type];
if (H5FD_MEM_DEFAULT==mmt) mmt = type;
- if (HADDR_UNDEF==(addr=H5FDalloc(file->memb[mmt], type, size))) {
+ if (HADDR_UNDEF==(addr=H5FDalloc(file->memb[mmt], type, dxpl_id, size))) {
H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "member file can't alloc", HADDR_UNDEF);
}
addr += file->fa.memb_addr[mmt];
@@ -1615,7 +1611,7 @@ H5FD_multi_alloc(H5FD_t *_file, H5FD_mem_t type, hsize_t size)
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_multi_free(H5FD_t *_file, H5FD_mem_t type, haddr_t addr, hsize_t size)
+H5FD_multi_free(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
{
H5FD_multi_t *file = (H5FD_multi_t*)_file;
H5FD_mem_t mmt;
@@ -1628,7 +1624,7 @@ H5FD_multi_free(H5FD_t *_file, H5FD_mem_t type, haddr_t addr, hsize_t size)
assert(addr>=file->fa.memb_addr[mmt]);
assert(addr+size<=file->memb_next[mmt]);
- return H5FDfree(file->memb[mmt], type, addr-file->fa.memb_addr[mmt], size);
+ return H5FDfree(file->memb[mmt], type, dxpl_id, addr-file->fa.memb_addr[mmt], size);
}
@@ -1760,7 +1756,7 @@ H5FD_multi_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, si
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_multi_flush(H5FD_t *_file, unsigned closing)
+H5FD_multi_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing)
{
H5FD_multi_t *file = (H5FD_multi_t*)_file;
H5FD_mem_t mt;
@@ -1806,7 +1802,7 @@ H5FD_multi_flush(H5FD_t *_file, unsigned closing)
for (mt=H5FD_MEM_SUPER; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
if (file->memb[mt]) {
H5E_BEGIN_TRY {
- if (H5FDflush(file->memb[mt],closing)<0) nerrors++;
+ if (H5FDflush(file->memb[mt],dxpl_id,closing)<0) nerrors++;
} H5E_END_TRY;
}
}
diff --git a/src/H5FDprivate.h b/src/H5FDprivate.h
index 187af34..f64eecb 100644
--- a/src/H5FDprivate.h
+++ b/src/H5FDprivate.h
@@ -20,16 +20,16 @@ H5_DLL herr_t H5FD_sb_decode(H5FD_t *file, const char *name, const uint8_t *buf)
H5_DLL void *H5FD_fapl_get(H5FD_t *file);
H5_DLL void *H5FD_fapl_copy(hid_t driver_id, const void *fapl);
H5_DLL herr_t H5FD_fapl_free(hid_t driver_id, void *fapl);
-H5_DLL void *H5FD_dxpl_copy(hid_t driver_id, const void *dxpl);
+H5_DLL herr_t H5FD_dxpl_copy(hid_t driver_id, const void *dxpl, void **copied_dxpl);
H5_DLL herr_t H5FD_dxpl_free(hid_t driver_id, void *dxpl);
H5_DLL H5FD_t *H5FD_open(const char *name, unsigned flags, hid_t fapl_id,
haddr_t maxaddr);
H5_DLL herr_t H5FD_close(H5FD_t *file);
H5_DLL int H5FD_cmp(const H5FD_t *f1, const H5FD_t *f2);
H5_DLL int H5FD_query(const H5FD_t *f, unsigned long *flags/*out*/);
-H5_DLL haddr_t H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hsize_t size);
-H5_DLL herr_t H5FD_free(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size);
-H5_DLL haddr_t H5FD_realloc(H5FD_t *file, H5FD_mem_t type, haddr_t old_addr,
+H5_DLL haddr_t H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+H5_DLL herr_t H5FD_free(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size);
+H5_DLL haddr_t H5FD_realloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr,
hsize_t old_size, hsize_t new_size);
H5_DLL haddr_t H5FD_get_eoa(H5FD_t *file);
H5_DLL herr_t H5FD_set_eoa(H5FD_t *file, haddr_t addr);
@@ -38,7 +38,7 @@ H5_DLL herr_t H5FD_read(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t ad
void *buf/*out*/);
H5_DLL herr_t H5FD_write(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
const void *buf);
-H5_DLL herr_t H5FD_flush(H5FD_t *file, unsigned closing);
+H5_DLL herr_t H5FD_flush(H5FD_t *file, hid_t dxpl_id, unsigned closing);
H5_DLL herr_t H5FD_get_fileno(const H5FD_t *file, unsigned long *filenum);
H5_DLL herr_t H5FD_get_vfd_handle(H5FD_t *file, hid_t fapl, void** file_handle);
diff --git a/src/H5FDpublic.h b/src/H5FDpublic.h
index 3cf1c94..a04efc1 100644
--- a/src/H5FDpublic.h
+++ b/src/H5FDpublic.h
@@ -140,8 +140,8 @@ typedef struct H5FD_class_t {
herr_t (*close)(H5FD_t *file);
int (*cmp)(const H5FD_t *f1, const H5FD_t *f2);
herr_t (*query)(const H5FD_t *f1, unsigned long *flags);
- haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hsize_t size);
- herr_t (*free)(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size);
+ haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+ herr_t (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size);
haddr_t (*get_eoa)(H5FD_t *file);
herr_t (*set_eoa)(H5FD_t *file, haddr_t addr);
haddr_t (*get_eof)(H5FD_t *file);
@@ -150,7 +150,7 @@ typedef struct H5FD_class_t {
void *buffer);
herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size,
const void *buffer);
- herr_t (*flush)(H5FD_t *file, unsigned closing);
+ herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, unsigned closing);
H5FD_mem_t fl_map[H5FD_MEM_NTYPES];
} H5FD_class_t;
@@ -211,9 +211,9 @@ H5_DLL H5FD_t *H5FDopen(const char *name, unsigned flags, hid_t fapl_id,
H5_DLL herr_t H5FDclose(H5FD_t *file);
H5_DLL int H5FDcmp(const H5FD_t *f1, const H5FD_t *f2);
H5_DLL int H5FDquery(const H5FD_t *f, unsigned long *flags);
-H5_DLL haddr_t H5FDalloc(H5FD_t *file, H5FD_mem_t type, hsize_t size);
-H5_DLL herr_t H5FDfree(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size);
-H5_DLL haddr_t H5FDrealloc(H5FD_t *file, H5FD_mem_t type, haddr_t addr,
+H5_DLL haddr_t H5FDalloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+H5_DLL herr_t H5FDfree(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size);
+H5_DLL haddr_t H5FDrealloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
hsize_t old_size, hsize_t new_size);
H5_DLL haddr_t H5FDget_eoa(H5FD_t *file);
H5_DLL herr_t H5FDset_eoa(H5FD_t *file, haddr_t eof);
@@ -223,7 +223,7 @@ H5_DLL herr_t H5FDread(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t add
void *buf/*out*/);
H5_DLL herr_t H5FDwrite(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
const void *buf);
-H5_DLL herr_t H5FDflush(H5FD_t *file, unsigned closing);
+H5_DLL herr_t H5FDflush(H5FD_t *file, hid_t dxpl_id, unsigned closing);
#ifdef __cplusplus
}
diff --git a/src/H5FDsec2.c b/src/H5FDsec2.c
index ecd4d62..5b82cb4 100644
--- a/src/H5FDsec2.c
+++ b/src/H5FDsec2.c
@@ -143,7 +143,7 @@ static herr_t H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, hadd
size_t size, void *buf);
static herr_t H5FD_sec2_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
size_t size, const void *buf);
-static herr_t H5FD_sec2_flush(H5FD_t *_file,unsigned closing);
+static herr_t H5FD_sec2_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
static const H5FD_class_t H5FD_sec2_g = {
"sec2", /*name */
@@ -780,7 +780,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_sec2_flush(H5FD_t *_file, unsigned UNUSED closing)
+H5FD_sec2_flush(H5FD_t *_file, hid_t dxpl_id, unsigned UNUSED closing)
{
H5FD_sec2_t *file = (H5FD_sec2_t*)_file;
#ifdef WIN32
diff --git a/src/H5FDsrb.c b/src/H5FDsrb.c
index 480bf45..1200f6a 100644
--- a/src/H5FDsrb.c
+++ b/src/H5FDsrb.c
@@ -89,7 +89,7 @@ static herr_t H5FD_srb_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, hadd
size_t size, void *buf);
static herr_t H5FD_srb_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
size_t size, const void *buf);
-static herr_t H5FD_srb_flush(H5FD_t *_file, unsigned closing);
+static herr_t H5FD_srb_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
/* The description of a file belonging to this driver. */
typedef struct H5FD_srb_t {
@@ -759,7 +759,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_srb_flush(H5FD_t *_file, unsigned UNUSED closing)
+H5FD_srb_flush(H5FD_t *_file, hid_t dxpl_id, unsigned UNUSED closing)
{
H5FD_srb_t *file = (H5FD_srb_t*)_file;
herr_t ret_value=SUCCEED; /* Return value */
diff --git a/src/H5FDstdio.c b/src/H5FDstdio.c
index 311fb98..3b9aa41 100644
--- a/src/H5FDstdio.c
+++ b/src/H5FDstdio.c
@@ -142,7 +142,7 @@ static herr_t H5FD_stdio_read(H5FD_t *lf, H5FD_mem_t type, hid_t fapl_id, haddr_
size_t size, void *buf);
static herr_t H5FD_stdio_write(H5FD_t *lf, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
size_t size, const void *buf);
-static herr_t H5FD_stdio_flush(H5FD_t *_file, unsigned closing);
+static herr_t H5FD_stdio_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
static const H5FD_class_t H5FD_stdio_g = {
"stdio", /*name */
@@ -378,8 +378,6 @@ H5FD_stdio_close(H5FD_t *_file)
/* Clear the error stack */
H5Eclear();
- if (H5FD_stdio_flush(_file,1)<0)
- H5Epush_ret(func, H5E_IO, H5E_WRITEERROR, "flush failed", -1);
if (fclose(file->fp) < 0)
H5Epush_ret(func, H5E_IO, H5E_CLOSEERROR, "fclose failed", -1);
@@ -833,7 +831,7 @@ H5FD_stdio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_stdio_flush(H5FD_t *_file, unsigned closing)
+H5FD_stdio_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing)
{
H5FD_stdio_t *file = (H5FD_stdio_t*)_file;
static const char *func="H5FD_stdio_flush"; /* Function Name for error reporting */
diff --git a/src/H5Farray.c b/src/H5Farray.c
index bc82cf5..d5d251e 100644
--- a/src/H5Farray.c
+++ b/src/H5Farray.c
@@ -92,7 +92,6 @@ H5F_arr_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
struct H5O_efl_t efl; /* External File List info */
#ifdef H5_HAVE_PARALLEL
H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT;
- H5P_genplist_t *plist=NULL; /* Property list */
#endif /* H5_HAVE_PARALLEL */
herr_t ret_value = SUCCEED; /* Return value */
@@ -113,32 +112,25 @@ H5F_arr_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
H5V_vector_cpy(layout->ndims, hslab_size, _hslab_size);
#ifdef H5_HAVE_PARALLEL
- {
- H5FD_mpio_dxpl_t *dx;
- hid_t driver_id; /* VFL driver ID */
-
- /* Get the transfer mode for MPIO transfers */
- if(IS_H5FD_MPIO(f)) {
- /* Get the plist structure */
- if(NULL == (plist = H5I_object(dxpl_id)))
- HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
-
- /* Get the driver ID */
- if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
-
- /* Check if we are using the MPIO driver (for the DXPL) */
- if(H5FD_MPIO==driver_id) {
- /* Get the driver information */
- if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
-
- /* Check if we are not using independent I/O */
- if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
- xfer_mode = dx->xfer_mode;
- } /* end if */
+ /* Get the transfer mode for MPIO transfers */
+ if(IS_H5FD_MPIO(f)) {
+ hid_t driver_id; /* VFL driver ID */
+ H5P_genplist_t *plist; /* Property list */
+
+ /* Get the plist structure */
+ if(NULL == (plist = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+ /* Get the driver ID */
+ if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+ HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
+
+ /* Check if we are using the MPIO driver (for the DXPL) */
+ if(H5FD_MPIO==driver_id) {
+ /* Get the transfer mode */
+ xfer_mode=H5P_peek_unsigned(plist, H5D_XFER_IO_XFER_MODE_NAME);
} /* end if */
- }
+ } /* end if */
/* Collective MPIO access is unsupported for non-contiguous datasets */
if (H5D_CONTIGUOUS!=layout->type && H5FD_MPIO_COLLECTIVE==xfer_mode)
@@ -334,7 +326,6 @@ H5F_arr_write(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout,
struct H5O_efl_t efl; /* External File List info */
#ifdef H5_HAVE_PARALLEL
H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT;
- H5P_genplist_t *plist=NULL; /* Property list */
#endif /* H5_HAVE_PARALLEL */
herr_t ret_value = SUCCEED; /* Return value */
@@ -355,32 +346,25 @@ H5F_arr_write(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout,
H5V_vector_cpy(layout->ndims, hslab_size, _hslab_size);
#ifdef H5_HAVE_PARALLEL
- {
- H5FD_mpio_dxpl_t *dx;
+ /* Get the transfer mode for MPIO transfers */
+ if(IS_H5FD_MPIO(f)) {
hid_t driver_id; /* VFL driver ID */
+ H5P_genplist_t *plist; /* Property list */
- /* Get the transfer mode for MPIO transfers */
- if(IS_H5FD_MPIO(f)) {
- /* Get the plist structure */
- if(NULL == (plist = H5I_object(dxpl_id)))
- HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
-
- /* Get the driver ID */
- if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
-
- /* Check if we are using the MPIO driver (for the DXPL) */
- if(H5FD_MPIO==driver_id) {
- /* Get the driver information */
- if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
-
- /* Check if we are not using independent I/O */
- if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
- xfer_mode = dx->xfer_mode;
- } /* end if */
+ /* Get the plist structure */
+ if(NULL == (plist = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+ /* Get the driver ID */
+ if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+ HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
+
+ /* Check if we are using the MPIO driver (for the DXPL) */
+ if(H5FD_MPIO==driver_id) {
+ /* Get the transfer mode */
+ xfer_mode=H5P_peek_unsigned(plist, H5D_XFER_IO_XFER_MODE_NAME);
} /* end if */
- }
+ } /* end if */
if (H5D_CONTIGUOUS!=layout->type && H5FD_MPIO_COLLECTIVE==xfer_mode)
HGOTO_ERROR (H5E_DATASET, H5E_WRITEERROR, FAIL, "collective access on non-contiguous datasets not supported yet");
diff --git a/src/H5Fistore.c b/src/H5Fistore.c
index eefa690..ec233bf 100644
--- a/src/H5Fistore.c
+++ b/src/H5Fistore.c
@@ -108,23 +108,23 @@ typedef H5F_rdcc_ent_t *H5F_rdcc_ent_ptr_t; /* For free lists */
/* Private prototypes */
static size_t H5F_istore_sizeof_rkey(H5F_t *f, const void *_udata);
-static herr_t H5F_istore_new_node(H5F_t *f, H5B_ins_t, void *_lt_key,
+static herr_t H5F_istore_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t, void *_lt_key,
void *_udata, void *_rt_key,
haddr_t *addr_p /*out*/);
-static int H5F_istore_cmp2(H5F_t *f, void *_lt_key, void *_udata,
+static int H5F_istore_cmp2(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata,
void *_rt_key);
-static int H5F_istore_cmp3(H5F_t *f, void *_lt_key, void *_udata,
+static int H5F_istore_cmp3(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata,
void *_rt_key);
-static herr_t H5F_istore_found(H5F_t *f, haddr_t addr, const void *_lt_key,
+static herr_t H5F_istore_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_lt_key,
void *_udata, const void *_rt_key);
-static H5B_ins_t H5F_istore_insert(H5F_t *f, haddr_t addr, void *_lt_key,
+static H5B_ins_t H5F_istore_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
hbool_t *lt_key_changed, void *_md_key,
void *_udata, void *_rt_key,
hbool_t *rt_key_changed,
haddr_t *new_node/*out*/);
-static H5B_iterate_t H5F_istore_iter_allocated(H5F_t *f, void *left_key, haddr_t addr,
+static H5B_iterate_t H5F_istore_iter_allocated(H5F_t *f, hid_t dxpl_id, void *left_key, haddr_t addr,
void *right_key, void *_udata);
-static H5B_iterate_t H5F_istore_iter_dump(H5F_t *f, void *left_key, haddr_t addr,
+static H5B_iterate_t H5F_istore_iter_dump(H5F_t *f, hid_t dxpl_id, void *left_key, haddr_t addr,
void *right_key, void *_udata);
static herr_t H5F_istore_decode_key(H5F_t *f, H5B_t *bt, uint8_t *raw,
void *_key);
@@ -132,11 +132,11 @@ static herr_t H5F_istore_encode_key(H5F_t *f, H5B_t *bt, uint8_t *raw,
void *_key);
static herr_t H5F_istore_debug_key(FILE *stream, int indent, int fwidth,
const void *key, const void *udata);
-static haddr_t H5F_istore_get_addr(H5F_t *f, const H5O_layout_t *layout,
+static haddr_t H5F_istore_get_addr(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
const hssize_t offset[]);
-static H5B_iterate_t H5F_istore_prune_extent(H5F_t *f, void *_lt_key, haddr_t addr,
+static H5B_iterate_t H5F_istore_prune_extent(H5F_t *f, hid_t dxpl_id, void *_lt_key, haddr_t addr,
void *_rt_key, void *_udata);
-static H5B_ins_t H5F_istore_remove( H5F_t *f, haddr_t addr, void *_lt_key,
+static H5B_ins_t H5F_istore_remove( H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
hbool_t *lt_key_changed, void *_udata, void *_rt_key,
hbool_t *rt_key_changed);
@@ -387,7 +387,7 @@ done:
*-------------------------------------------------------------------------
*/
static int
-H5F_istore_cmp2(H5F_t UNUSED *f, void *_lt_key, void *_udata,
+H5F_istore_cmp2(H5F_t UNUSED *f, hid_t dxpl_id, void *_lt_key, void *_udata,
void *_rt_key)
{
H5F_istore_key_t *lt_key = (H5F_istore_key_t *) _lt_key;
@@ -440,7 +440,7 @@ done:
*-------------------------------------------------------------------------
*/
static int
-H5F_istore_cmp3(H5F_t UNUSED *f, void *_lt_key, void *_udata,
+H5F_istore_cmp3(H5F_t UNUSED *f, hid_t dxpl_id, void *_lt_key, void *_udata,
void *_rt_key)
{
H5F_istore_key_t *lt_key = (H5F_istore_key_t *) _lt_key;
@@ -489,7 +489,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_istore_new_node(H5F_t *f, H5B_ins_t op,
+H5F_istore_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t op,
void *_lt_key, void *_udata, void *_rt_key,
haddr_t *addr_p/*out*/)
{
@@ -511,7 +511,8 @@ H5F_istore_new_node(H5F_t *f, H5B_ins_t op,
/* Allocate new storage */
assert (udata->key.nbytes > 0);
- if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_DRAW, (hsize_t)udata->key.nbytes)))
+ H5_CHECK_OVERFLOW( udata->key.nbytes ,size_t, hsize_t);
+ if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->key.nbytes)))
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "couldn't allocate new file storage");
udata->addr = *addr_p;
@@ -573,7 +574,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_istore_found(H5F_t UNUSED *f, haddr_t addr, const void *_lt_key,
+H5F_istore_found(H5F_t UNUSED *f, hid_t dxpl_id, haddr_t addr, const void *_lt_key,
void *_udata, const void UNUSED *_rt_key)
{
H5F_istore_ud1_t *udata = (H5F_istore_ud1_t *) _udata;
@@ -641,7 +642,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_ins_t
-H5F_istore_insert(H5F_t *f, haddr_t addr, void *_lt_key,
+H5F_istore_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
hbool_t UNUSED *lt_key_changed,
void *_md_key, void *_udata, void *_rt_key,
hbool_t UNUSED *rt_key_changed,
@@ -668,7 +669,7 @@ H5F_istore_insert(H5F_t *f, haddr_t addr, void *_lt_key,
assert(rt_key_changed);
assert(new_node_p);
- cmp = H5F_istore_cmp3(f, lt_key, udata, rt_key);
+ cmp = H5F_istore_cmp3(f, dxpl_id, lt_key, udata, rt_key);
assert(cmp <= 0);
if (cmp < 0) {
@@ -698,9 +699,11 @@ H5F_istore_insert(H5F_t *f, haddr_t addr, void *_lt_key,
(hsize_t)lt_key->nbytes, (hsize_t)udata->key.nbytes)))
HGOTO_ERROR (H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "unable to reallocate chunk storage");
#else /* OLD_WAY */
- if (H5MF_xfree(f, H5FD_MEM_DRAW, addr,(hsize_t)lt_key->nbytes)<0)
+ H5_CHECK_OVERFLOW( lt_key->nbytes ,size_t, hsize_t);
+ if (H5MF_xfree(f, H5FD_MEM_DRAW, dxpl_id, addr, (hsize_t)lt_key->nbytes)<0)
HGOTO_ERROR(H5E_STORAGE, H5E_CANTFREE, H5B_INS_ERROR, "unable to free chunk");
- if (HADDR_UNDEF==(*new_node_p=H5MF_alloc(f, H5FD_MEM_DRAW, (hsize_t)udata->key.nbytes)))
+ H5_CHECK_OVERFLOW( udata->key.nbytes ,size_t, hsize_t);
+ if (HADDR_UNDEF==(*new_node_p=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->key.nbytes)))
HGOTO_ERROR(H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "unable to reallocate chunk");
#endif /* OLD_WAY */
lt_key->nbytes = udata->key.nbytes;
@@ -733,7 +736,8 @@ H5F_istore_insert(H5F_t *f, haddr_t addr, void *_lt_key,
/*
* Allocate storage for the new chunk
*/
- if (HADDR_UNDEF==(*new_node_p=H5MF_alloc(f, H5FD_MEM_DRAW, (hsize_t)udata->key.nbytes)))
+ H5_CHECK_OVERFLOW( udata->key.nbytes ,size_t, hsize_t);
+ if (HADDR_UNDEF==(*new_node_p=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->key.nbytes)))
HGOTO_ERROR(H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "file allocation failed");
udata->addr = *new_node_p;
ret_value = H5B_INS_RIGHT;
@@ -769,7 +773,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_iterate_t
-H5F_istore_iter_allocated (H5F_t UNUSED *f, void *_lt_key, haddr_t UNUSED addr,
+H5F_istore_iter_allocated (H5F_t UNUSED *f, hid_t dxpl_id, void *_lt_key, haddr_t UNUSED addr,
void UNUSED *_rt_key, void *_udata)
{
H5F_istore_ud1_t *bt_udata = (H5F_istore_ud1_t *)_udata;
@@ -805,7 +809,7 @@ H5F_istore_iter_allocated (H5F_t UNUSED *f, void *_lt_key, haddr_t UNUSED addr,
*-------------------------------------------------------------------------
*/
static H5B_iterate_t
-H5F_istore_iter_dump (H5F_t UNUSED *f, void *_lt_key, haddr_t UNUSED addr,
+H5F_istore_iter_dump (H5F_t UNUSED *f, hid_t dxpl_id, void *_lt_key, haddr_t UNUSED addr,
void UNUSED *_rt_key, void *_udata)
{
H5F_istore_ud1_t *bt_udata = (H5F_istore_ud1_t *)_udata;
@@ -890,7 +894,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_istore_flush_entry(H5F_t *f, H5F_rdcc_ent_t *ent, hbool_t reset)
+H5F_istore_flush_entry(H5F_t *f, hid_t dxpl_id, H5F_rdcc_ent_t *ent, hbool_t reset)
{
herr_t ret_value=SUCCEED; /*return value */
H5F_istore_ud1_t udata; /*pass through B-tree */
@@ -898,8 +902,6 @@ H5F_istore_flush_entry(H5F_t *f, H5F_rdcc_ent_t *ent, hbool_t reset)
void *buf=NULL; /*temporary buffer */
size_t alloc; /*bytes allocated for BUF */
hbool_t point_of_no_return = FALSE;
- H5Z_cb_t cb_struct={NULL,NULL};
- H5Z_EDC_t edc=H5Z_ENABLE_EDC;
FUNC_ENTER_NOINIT(H5F_istore_flush_entry);
@@ -921,6 +923,10 @@ H5F_istore_flush_entry(H5F_t *f, H5F_rdcc_ent_t *ent, hbool_t reset)
/* Should the chunk be filtered before writing it to disk? */
if (ent->pline && ent->pline->nfilters) {
+ H5P_genplist_t *plist; /* Data xfer property list */
+ H5Z_cb_t cb_struct;
+ H5Z_EDC_t edc;
+
if (!reset) {
/*
* Copy the chunk to a new buffer before running it through
@@ -947,6 +953,12 @@ H5F_istore_flush_entry(H5F_t *f, H5F_rdcc_ent_t *ent, hbool_t reset)
/* Don't know whether we should involve transfer property list. So
* just pass in H5Z_ENABLE_EDC and default callback setting for data
* read. */
+ if (NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER)))
+ HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list");
+ if(H5P_get(plist,H5D_XFER_EDC_NAME,&edc)<0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, NULL, "can't get edc information");
+ if(H5P_get(plist,H5D_XFER_FILTER_CB_NAME,&cb_struct)<0)
+ HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, NULL, "can't get filter callback struct");
if (H5Z_pipeline(f, ent->pline, 0, &(udata.key.filter_mask), edc,
cb_struct, &(udata.key.nbytes), &alloc, &buf)<0) {
HGOTO_ERROR(H5E_PLINE, H5E_WRITEERROR, FAIL,
@@ -958,9 +970,9 @@ H5F_istore_flush_entry(H5F_t *f, H5F_rdcc_ent_t *ent, hbool_t reset)
* Create the chunk it if it doesn't exist, or reallocate the chunk if
* its size changed. Then write the data into the file.
*/
- if (H5B_insert(f, H5B_ISTORE, ent->layout->addr, ent->split_ratios, &udata)<0)
+ if (H5B_insert(f, dxpl_id, H5B_ISTORE, ent->layout->addr, ent->split_ratios, &udata)<0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to allocate chunk");
- if (H5F_block_write(f, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, H5P_DATASET_XFER_DEFAULT, buf)<0)
+ if (H5F_block_write(f, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, dxpl_id, buf)<0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file");
/* Mark cache entry as clean */
@@ -1018,7 +1030,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_istore_preempt(H5F_t *f, H5F_rdcc_ent_t * ent, hbool_t flush)
+H5F_istore_preempt(H5F_t *f, hid_t dxpl_id, H5F_rdcc_ent_t * ent, hbool_t flush)
{
H5F_rdcc_t *rdcc = &(f->shared->rdcc);
herr_t ret_value=SUCCEED; /* Return value */
@@ -1032,7 +1044,7 @@ H5F_istore_preempt(H5F_t *f, H5F_rdcc_ent_t * ent, hbool_t flush)
if(flush) {
/* Flush */
- if(H5F_istore_flush_entry(f, ent, TRUE) < 0)
+ if(H5F_istore_flush_entry(f, dxpl_id, ent, TRUE) < 0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "cannot flush indexed storage buffer");
}
else {
@@ -1086,7 +1098,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_flush (H5F_t *f, hbool_t preempt)
+H5F_istore_flush (H5F_t *f, hid_t dxpl_id, hbool_t preempt)
{
H5F_rdcc_t *rdcc = &(f->shared->rdcc);
int nerrors=0;
@@ -1098,10 +1110,10 @@ H5F_istore_flush (H5F_t *f, hbool_t preempt)
for (ent=rdcc->head; ent; ent=next) {
next = ent->next;
if (preempt) {
- if (H5F_istore_preempt(f, ent, TRUE )<0)
+ if (H5F_istore_preempt(f, dxpl_id, ent, TRUE )<0)
nerrors++;
} else {
- if (H5F_istore_flush_entry(f, ent, FALSE)<0)
+ if (H5F_istore_flush_entry(f, dxpl_id, ent, FALSE)<0)
nerrors++;
}
}
@@ -1132,7 +1144,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_dest (H5F_t *f)
+H5F_istore_dest (H5F_t *f, hid_t dxpl_id)
{
H5F_rdcc_t *rdcc = &(f->shared->rdcc);
int nerrors=0;
@@ -1147,7 +1159,7 @@ H5F_istore_dest (H5F_t *f)
HDfflush(stderr);
#endif
next = ent->next;
- if (H5F_istore_preempt(f, ent, TRUE )<0)
+ if (H5F_istore_preempt(f, dxpl_id, ent, TRUE )<0)
nerrors++;
}
if (nerrors)
@@ -1180,7 +1192,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5F_istore_prune (H5F_t *f, size_t size)
+H5F_istore_prune (H5F_t *f, hid_t dxpl_id, size_t size)
{
int i, j, nerrors=0;
H5F_rdcc_t *rdcc = &(f->shared->rdcc);
@@ -1259,7 +1271,7 @@ H5F_istore_prune (H5F_t *f, size_t size)
if (n[j]==cur)
n[j] = cur->next;
}
- if (H5F_istore_preempt(f, cur, TRUE)<0)
+ if (H5F_istore_preempt(f, dxpl_id, cur, TRUE)<0)
nerrors++;
}
}
@@ -1331,7 +1343,7 @@ H5F_istore_lock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
herr_t status; /*func return status */
void *chunk=NULL; /*the file chunk */
void *ret_value; /*return value */
- H5P_genplist_t *plist=NULL; /* Property list */
+ H5P_genplist_t *plist; /* Property list */
H5Z_EDC_t edc;
H5Z_cb_t cb_struct;
@@ -1399,7 +1411,7 @@ H5F_istore_lock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
H5_ASSIGN_OVERFLOW(chunk_size,tempchunk_size,hsize_t,size_t);
udata.mesg = *layout;
udata.addr = HADDR_UNDEF;
- status = H5B_find (f, H5B_ISTORE, layout->addr, &udata);
+ status = H5B_find (f, dxpl_id, H5B_ISTORE, layout->addr, &udata);
H5E_clear ();
if (status>=0 && H5F_addr_defined(udata.addr)) {
@@ -1413,7 +1425,7 @@ H5F_istore_lock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
chunk_alloc = udata.key.nbytes;
if (NULL==(chunk = H5MM_malloc (chunk_alloc)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk");
- if (H5F_block_read(f, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, H5P_DATASET_XFER_DEFAULT, chunk)<0)
+ if (H5F_block_read(f, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, dxpl_id, chunk)<0)
HGOTO_ERROR (H5E_IO, H5E_READERROR, NULL, "unable to read raw data chunk");
if(H5P_get(plist,H5D_XFER_EDC_NAME,&edc)<0)
HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, NULL, "can't get edc information");
@@ -1459,11 +1471,10 @@ H5F_istore_lock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
HDputc('#', stderr);
HDfflush(stderr);
#endif
- if (H5F_istore_preempt(f, ent, TRUE)<0)
+ if (H5F_istore_preempt(f, dxpl_id, ent, TRUE)<0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk from cache");
}
-
- if (H5F_istore_prune(f, chunk_size)<0)
+ if (H5F_istore_prune(f, dxpl_id, chunk_size)<0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk(s) from cache");
/* Create a new entry */
@@ -1629,7 +1640,7 @@ H5F_istore_unlock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
assert(plist!=NULL);
H5P_get(plist,H5D_XFER_BTREE_SPLIT_RATIO_NAME,&(x.split_ratios));
- H5F_istore_flush_entry (f, &x, TRUE);
+ H5F_istore_flush_entry (f, dxpl_id, &x, TRUE);
} else {
if(chunk)
H5MM_xfree (chunk);
@@ -1763,7 +1774,7 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
}
/* Get the address of this chunk on disk */
- chunk_addr=H5F_istore_get_addr(f, layout, chunk_offset);
+ chunk_addr=H5F_istore_get_addr(f, dxpl_id, layout, chunk_offset);
/*
* If the chunk is too large to load into the cache and it has no
@@ -1800,8 +1811,7 @@ H5F_istore_read(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
for (u=l.ndims; u-- > 0; /*void*/)
l.dim[u] = layout->dim[u];
l.addr = chunk_addr;
- if (H5F_arr_read(f, H5P_DATASET_XFER_DEFAULT, &l, dc_plist,
- sub_size, size_m, sub_offset_m, offset_wrt_chunk, buf)<0)
+ if (H5F_arr_read(f, dxpl_id, &l, dc_plist, sub_size, size_m, sub_offset_m, offset_wrt_chunk, buf)<0)
HGOTO_ERROR (H5E_IO, H5E_READERROR, FAIL, "unable to read raw data from file");
} /* end if */
else {
@@ -1945,7 +1955,7 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
}
/* Get the address of this chunk on disk */
- chunk_addr=H5F_istore_get_addr(f, layout, chunk_offset);
+ chunk_addr=H5F_istore_get_addr(f, dxpl_id, layout, chunk_offset);
/*
* If the chunk is too large to load into the cache and it has no
@@ -1982,8 +1992,7 @@ H5F_istore_write(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
for (u=l.ndims; u-- > 0; /*void*/)
l.dim[u] = layout->dim[u];
l.addr = chunk_addr;
- if (H5F_arr_write(f, H5P_DATASET_XFER_DEFAULT, &l, dc_plist,
- sub_size, size_m, sub_offset_m, offset_wrt_chunk, buf)<0)
+ if (H5F_arr_write(f, dxpl_id, &l, dc_plist, sub_size, size_m, sub_offset_m, offset_wrt_chunk, buf)<0)
HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file");
} /* end if */
else {
@@ -2037,7 +2046,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_create(H5F_t *f, H5O_layout_t *layout /*out */ )
+H5F_istore_create(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout /*out */ )
{
H5F_istore_ud1_t udata;
#ifndef NDEBUG
@@ -2057,7 +2066,7 @@ H5F_istore_create(H5F_t *f, H5O_layout_t *layout /*out */ )
#endif
udata.mesg.ndims = layout->ndims;
- if (H5B_create(f, H5B_ISTORE, &udata, &(layout->addr)/*out*/) < 0)
+ if (H5B_create(f, dxpl_id, H5B_ISTORE, &udata, &(layout->addr)/*out*/) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "can't create B-tree");
done:
@@ -2085,7 +2094,7 @@ done:
*-------------------------------------------------------------------------
*/
hsize_t
-H5F_istore_allocated(H5F_t *f, unsigned ndims, haddr_t addr)
+H5F_istore_allocated(H5F_t *f, hid_t dxpl_id, unsigned ndims, haddr_t addr)
{
H5F_istore_ud1_t udata;
hsize_t ret_value; /* Return value */
@@ -2094,7 +2103,7 @@ H5F_istore_allocated(H5F_t *f, unsigned ndims, haddr_t addr)
HDmemset(&udata, 0, sizeof udata);
udata.mesg.ndims = ndims;
- if (H5B_iterate(f, H5B_ISTORE, H5F_istore_iter_allocated, addr, &udata)<0)
+ if (H5B_iterate(f, dxpl_id, H5B_ISTORE, H5F_istore_iter_allocated, addr, &udata)<0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to iterate over chunk B-tree");
/* Set return value */
@@ -2124,7 +2133,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_dump_btree(H5F_t *f, FILE *stream, unsigned ndims, haddr_t addr)
+H5F_istore_dump_btree(H5F_t *f, hid_t dxpl_id, FILE *stream, unsigned ndims, haddr_t addr)
{
H5F_istore_ud1_t udata;
herr_t ret_value=SUCCEED; /* Return value */
@@ -2136,7 +2145,7 @@ H5F_istore_dump_btree(H5F_t *f, FILE *stream, unsigned ndims, haddr_t addr)
udata.stream = stream;
if(stream)
HDfprintf(stream, " Address: %a\n",addr);
- if(H5B_iterate(f, H5B_ISTORE, H5F_istore_iter_dump, addr, &udata)<0)
+ if(H5B_iterate(f, dxpl_id, H5B_ISTORE, H5F_istore_iter_dump, addr, &udata)<0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to iterate over chunk B-tree");
done:
@@ -2225,7 +2234,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent,
+H5F_istore_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
int fwidth, int ndims)
{
H5F_istore_ud1_t udata;
@@ -2236,7 +2245,7 @@ H5F_istore_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent,
HDmemset (&udata, 0, sizeof udata);
udata.mesg.ndims = ndims;
- H5B_debug (f, addr, stream, indent, fwidth, H5B_ISTORE, &udata);
+ H5B_debug (f, dxpl_id, addr, stream, indent, fwidth, H5B_ISTORE, &udata);
done:
FUNC_LEAVE_NOAPI(ret_value);
@@ -2262,7 +2271,7 @@ done:
*-------------------------------------------------------------------------
*/
static haddr_t
-H5F_istore_get_addr(H5F_t *f, const H5O_layout_t *layout,
+H5F_istore_get_addr(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
const hssize_t offset[])
{
H5F_istore_ud1_t udata; /* Information about a chunk */
@@ -2282,7 +2291,7 @@ H5F_istore_get_addr(H5F_t *f, const H5O_layout_t *layout,
udata.addr = HADDR_UNDEF;
/* Go get the chunk information */
- if (H5B_find (f, H5B_ISTORE, layout->addr, &udata)<0) {
+ if (H5B_find (f, dxpl_id, H5B_ISTORE, layout->addr, &udata)<0) {
H5E_clear();
HGOTO_ERROR(H5E_BTREE,H5E_NOTFOUND,HADDR_UNDEF,"Can't locate chunk info");
} /* end if */
@@ -2478,7 +2487,7 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
while (carry==0) {
/* Check if the chunk exists yet on disk */
chunk_exists=1;
- if(H5F_istore_get_addr(f,layout,chunk_offset)==HADDR_UNDEF) {
+ if(H5F_istore_get_addr(f,dxpl_id,layout,chunk_offset)==HADDR_UNDEF) {
H5F_rdcc_t *rdcc = &(f->shared->rdcc); /*raw data chunk cache */
H5F_rdcc_ent_t *ent = NULL; /*cache entry */
@@ -2512,7 +2521,7 @@ H5F_istore_allocate(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
udata.key.offset[u] = chunk_offset[u];
/* Allocate the chunk with all processes */
- if (H5B_insert(f, H5B_ISTORE, layout->addr, split_ratios, &udata)<0)
+ if (H5B_insert(f, dxpl_id, H5B_ISTORE, layout->addr, split_ratios, &udata)<0)
HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to allocate chunk");
/* Check if fill values should be written to blocks */
@@ -2673,7 +2682,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_prune_by_extent(H5F_t *f, const H5O_layout_t *layout, const H5S_t * space)
+H5F_istore_prune_by_extent(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout, const H5S_t * space)
{
H5F_rdcc_t *rdcc = &(f->shared->rdcc); /*raw data chunk cache */
H5F_rdcc_ent_t *ent = NULL, *next = NULL; /*cache entry */
@@ -2726,7 +2735,7 @@ H5F_istore_prune_by_extent(H5F_t *f, const H5O_layout_t *layout, const H5S_t * s
#endif
/* Preempt the entry from the cache, but do not flush it to disk */
- if(H5F_istore_preempt(f, ent, FALSE) < 0)
+ if(H5F_istore_preempt(f, dxpl_id, ent, FALSE) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to preempt chunk");
}
}
@@ -2744,7 +2753,7 @@ H5F_istore_prune_by_extent(H5F_t *f, const H5O_layout_t *layout, const H5S_t * s
udata.mesg.dim[u] = layout->dim[u];
udata.dims = curr_dims;
- if(H5B_iterate(f, H5B_ISTORE, H5F_istore_prune_extent, layout->addr, &udata) < 0)
+ if(H5B_iterate(f, dxpl_id, H5B_ISTORE, H5F_istore_prune_extent, layout->addr, &udata) < 0)
HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to iterate over B-tree");
done:
@@ -2770,7 +2779,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_iterate_t
-H5F_istore_prune_extent(H5F_t *f, void *_lt_key, haddr_t UNUSED addr,
+H5F_istore_prune_extent(H5F_t *f, hid_t dxpl_id, void *_lt_key, haddr_t UNUSED addr,
void UNUSED *_rt_key, void *_udata)
{
H5F_istore_ud1_t *bt_udata = (H5F_istore_ud1_t *)_udata;
@@ -2802,7 +2811,7 @@ H5F_istore_prune_extent(H5F_t *f, void *_lt_key, haddr_t UNUSED addr,
udata.mesg = bt_udata->mesg;
/* Remove */
- if(H5B_remove(f, H5B_ISTORE, bt_udata->mesg.addr, &udata) < 0)
+ if(H5B_remove(f, dxpl_id, H5B_ISTORE, bt_udata->mesg.addr, &udata) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5B_ITER_ERROR, "unable to remove entry");
break;
} /* end if */
@@ -2831,7 +2840,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_ins_t
-H5F_istore_remove(H5F_t *f, haddr_t addr, void *_lt_key /*in,out */ ,
+H5F_istore_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key /*in,out */ ,
hbool_t *lt_key_changed /*out */ ,
void UNUSED * _udata /*in,out */ ,
void UNUSED * _rt_key /*in,out */ ,
@@ -2842,7 +2851,7 @@ H5F_istore_remove(H5F_t *f, haddr_t addr, void *_lt_key /*in,out */ ,
FUNC_ENTER_NOAPI(H5F_istore_remove,H5B_INS_ERROR);
- H5FD_free(f->shared->lf, H5FD_MEM_DRAW, addr, (hsize_t)lt_key->nbytes);
+ H5FD_free(f->shared->lf, H5FD_MEM_DRAW, dxpl_id, addr, (hsize_t)lt_key->nbytes);
*lt_key_changed = FALSE;
*rt_key_changed = FALSE;
@@ -2876,10 +2885,9 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5F_istore_initialize_by_extent(H5F_t *f, const H5O_layout_t *layout,
+H5F_istore_initialize_by_extent(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
H5P_genplist_t *dc_plist, const H5S_t * space)
{
- hid_t dxpl_id; /*dataset transfer property list */
uint8_t *chunk = NULL; /*the file chunk */
unsigned idx_hint = 0; /*input value for H5F_istore_lock */
hssize_t chunk_offset[H5O_LAYOUT_NDIMS]; /*logical location of the chunks */
@@ -2930,9 +2938,6 @@ H5F_istore_initialize_by_extent(H5F_t *f, const H5O_layout_t *layout,
size[i] = curr_dims[i];
size[i] = layout->dim[i];
- /* Default dataset transfer property list */
- dxpl_id = H5P_DATASET_XFER_DEFAULT;
-
/* Create a data space for a chunk & set the extent */
if(NULL == (space_chunk = H5S_create(H5S_SIMPLE)))
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, "can't create simple dataspace");
diff --git a/src/H5Fpkg.h b/src/H5Fpkg.h
index 9326060..aab992a 100644
--- a/src/H5Fpkg.h
+++ b/src/H5Fpkg.h
@@ -176,24 +176,17 @@ H5_DLLVAR hbool_t H5_mpiposix_1_metawrite_g;
#endif /* H5_HAVE_PARALLEL */
/* Private functions, not part of the publicly documented API */
-H5_DLL void H5F_encode_length_unusual(const H5F_t *f, uint8_t **p,
- uint8_t *l);
-H5_DLL H5F_t *H5F_open(const char *name, unsigned flags, hid_t fcpl_id,
- hid_t fapl_id);
-H5_DLL herr_t H5F_close(H5F_t *f);
-H5_DLL herr_t H5F_close_all(void);
-H5_DLL herr_t H5F_flush_all(hbool_t invalidate);
-H5_DLL herr_t H5F_debug(H5F_t *f, haddr_t addr, FILE * stream,
- int indent, int fwidth);
-H5_DLL herr_t H5F_istore_debug(H5F_t *f, haddr_t addr, FILE * stream,
- int indent, int fwidth, int ndims);
+#ifdef NOT_YET
+H5_DLL void H5F_encode_length_unusual(const H5F_t *f, uint8_t **p, uint8_t *l);
+#endif /* NOT_YET */
H5_DLL herr_t H5F_mountpoint(struct H5G_entry_t *find/*in,out*/);
+H5_DLL herr_t H5F_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream,
+ int indent, int fwidth);
/* Functions that operate on indexed storage */
H5_DLL herr_t H5F_istore_init (H5F_t *f);
-H5_DLL herr_t H5F_istore_flush (H5F_t *f, hbool_t preempt);
-H5_DLL herr_t H5F_istore_dest (H5F_t *f);
-H5_DLL herr_t H5F_istore_stats (H5F_t *f, hbool_t headers);
+H5_DLL herr_t H5F_istore_flush (H5F_t *f, hid_t dxpl_id, hbool_t preempt);
+H5_DLL herr_t H5F_istore_dest (H5F_t *f, hid_t dxpl_id);
H5_DLL herr_t H5F_istore_read(H5F_t *f, hid_t dxpl_id,
const struct H5O_layout_t *layout,
struct H5P_genplist_t *dc_plist,
@@ -206,14 +199,15 @@ H5_DLL herr_t H5F_istore_write(H5F_t *f, hid_t dxpl_id,
const hsize_t size_m[], const hssize_t offset_m[],
const hssize_t offset[], const hsize_t size[],
const void *buf);
+H5_DLL herr_t H5F_istore_stats (H5F_t *f, hbool_t headers);
+H5_DLL herr_t H5F_istore_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream,
+ int indent, int fwidth, int ndims);
/* Functions that operate on contiguous storage wrt boot block */
H5_DLL herr_t H5F_contig_read(H5F_t *f, hsize_t max_data, H5FD_mem_t type, haddr_t addr,
size_t size, hid_t dxpl_id, void *_buf/*out*/);
H5_DLL herr_t H5F_contig_write(H5F_t *f, hsize_t max_data, H5FD_mem_t type, haddr_t addr,
size_t size, hid_t dxpl_id, const void *buf);
-
-/* Functions that operate on contiguous storage wrt boot block */
H5_DLL herr_t H5F_contig_readv(H5F_t *f, hsize_t max_data, H5FD_mem_t type, haddr_t addr,
size_t nseq, size_t size[], hsize_t offset[], hid_t dxpl_id, void *_buf/*out*/);
H5_DLL herr_t H5F_contig_writev(H5F_t *f, hsize_t max_data, H5FD_mem_t type, haddr_t addr,
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index 395b5e2..746b40f 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -434,17 +434,17 @@ H5_DLL herr_t H5F_contig_fill(H5F_t *f, hid_t dxpl_id,
const struct H5O_fill_t *fill, size_t elmt_size);
/* Functions that operate on indexed storage */
-H5_DLL herr_t H5F_istore_create(H5F_t *f,
+H5_DLL herr_t H5F_istore_create(H5F_t *f, hid_t dxpl_id,
struct H5O_layout_t *layout/*in,out*/);
H5_DLL herr_t H5F_istore_allocate (H5F_t *f, hid_t dxpl_id,
const struct H5O_layout_t *layout, const hsize_t *space_dim,
struct H5P_genplist_t *dc_plist, hbool_t full_overwrite);
-H5_DLL hsize_t H5F_istore_allocated(H5F_t *f, unsigned ndims, haddr_t addr);
-H5_DLL herr_t H5F_istore_dump_btree(H5F_t *f, FILE *stream, unsigned ndims,
+H5_DLL hsize_t H5F_istore_allocated(H5F_t *f, hid_t dxpl_id, unsigned ndims, haddr_t addr);
+H5_DLL herr_t H5F_istore_dump_btree(H5F_t *f, hid_t dxpl_id, FILE *stream, unsigned ndims,
haddr_t addr);
-H5_DLL herr_t H5F_istore_prune_by_extent( H5F_t *f,
+H5_DLL herr_t H5F_istore_prune_by_extent( H5F_t *f, hid_t dxpl_id,
const struct H5O_layout_t *layout, const struct H5S_t *space);
-H5_DLL herr_t H5F_istore_initialize_by_extent( H5F_t *f,
+H5_DLL herr_t H5F_istore_initialize_by_extent( H5F_t *f, hid_t dxpl_id,
const struct H5O_layout_t *layout, struct H5P_genplist_t *dc_plist,
const struct H5S_t *space );
diff --git a/src/H5Fseq.c b/src/H5Fseq.c
index 15cb668..fddf48f 100644
--- a/src/H5Fseq.c
+++ b/src/H5Fseq.c
@@ -176,7 +176,6 @@ H5F_seq_readv(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
int i,j; /*counters */
#ifdef H5_HAVE_PARALLEL
H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT;
- H5P_genplist_t *plist=NULL; /* Property list */
#endif /* H5_HAVE_PARALLEL */
herr_t ret_value = SUCCEED; /* Return value */
@@ -191,32 +190,25 @@ H5F_seq_readv(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
#ifdef H5_HAVE_PARALLEL
- {
- H5FD_mpio_dxpl_t *dx;
+ /* Get the transfer mode for MPIO transfers */
+ if(IS_H5FD_MPIO(f)) {
hid_t driver_id; /* VFL driver ID */
+ H5P_genplist_t *plist; /* Property list */
- /* Get the transfer mode for MPIO transfers */
- if(IS_H5FD_MPIO(f)) {
- /* Get the plist structure */
- if(NULL == (plist = H5I_object(dxpl_id)))
- HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
-
- /* Get the driver ID */
- if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
-
- /* Check if we are using the MPIO driver (for the DXPL) */
- if(H5FD_MPIO==driver_id) {
- /* Get the driver information */
- if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
-
- /* Check if we are not using independent I/O */
- if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
- xfer_mode = dx->xfer_mode;
- } /* end if */
+ /* Get the plist structure */
+ if(NULL == (plist = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+ /* Get the driver ID */
+ if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+ HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
+
+ /* Check if we are using the MPIO driver (for the DXPL) */
+ if(H5FD_MPIO==driver_id) {
+ /* Get the transfer mode */
+ xfer_mode=H5P_peek_unsigned(plist, H5D_XFER_IO_XFER_MODE_NAME);
} /* end if */
- }
+ } /* end if */
/* Collective MPIO access is unsupported for non-contiguous datasets */
if (H5D_CHUNKED==layout->type && H5FD_MPIO_COLLECTIVE==xfer_mode)
@@ -563,7 +555,6 @@ H5F_seq_writev(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout,
int i,j; /*counters */
#ifdef H5_HAVE_PARALLEL
H5FD_mpio_xfer_t xfer_mode=H5FD_MPIO_INDEPENDENT;
- H5P_genplist_t *plist=NULL; /* Property list */
#endif /* H5_HAVE_PARALLEL */
herr_t ret_value = SUCCEED; /* Return value */
@@ -578,32 +569,25 @@ H5F_seq_writev(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout,
assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
#ifdef H5_HAVE_PARALLEL
- {
- H5FD_mpio_dxpl_t *dx;
+ /* Get the transfer mode for MPIO transfers */
+ if(IS_H5FD_MPIO(f)) {
hid_t driver_id; /* VFL driver ID */
+ H5P_genplist_t *plist=NULL; /* Property list */
+
+ /* Get the plist structure */
+ if(NULL == (plist = H5I_object(dxpl_id)))
+ HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+ /* Get the driver ID */
+ if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+ HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
- /* Get the transfer mode for MPIO transfers */
- if(IS_H5FD_MPIO(f)) {
- /* Get the plist structure */
- if(NULL == (plist = H5I_object(dxpl_id)))
- HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
-
- /* Get the driver ID */
- if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
-
- /* Check if we are using the MPIO driver (for the DXPL) */
- if(H5FD_MPIO==driver_id) {
- /* Get the driver information */
- if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &dx)<0)
- HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info");
-
- /* Check if we are not using independent I/O */
- if(H5FD_MPIO_INDEPENDENT!=dx->xfer_mode)
- xfer_mode = dx->xfer_mode;
- } /* end if */
+ /* Check if we are using the MPIO driver (for the DXPL) */
+ if(H5FD_MPIO==driver_id) {
+ /* Get the transfer mode */
+ xfer_mode=H5P_peek_unsigned(plist, H5D_XFER_IO_XFER_MODE_NAME);
} /* end if */
- }
+ } /* end if */
/* Collective MPIO access is unsupported for non-contiguous datasets */
if (H5D_CHUNKED==layout->type && H5FD_MPIO_COLLECTIVE==xfer_mode)
diff --git a/src/H5G.c b/src/H5G.c
index 992c639..9e7095b 100644
--- a/src/H5G.c
+++ b/src/H5G.c
@@ -131,9 +131,29 @@ H5FL_DEFINE(H5G_t);
H5FL_BLK_EXTERN(str_buf);
/* Private prototypes */
+static H5G_t *H5G_create(H5G_entry_t *loc, const char *name, size_t size_hint, hid_t dxpl_id);
+#ifdef NOT_YET
+static H5G_t *H5G_reopen(H5G_t *grp);
+#endif /* NOT_YET */
+static htri_t H5G_isa(H5G_entry_t *ent, hid_t dxpl_id);
+static herr_t H5G_link(H5G_entry_t *cur_loc, const char *cur_name,
+ H5G_entry_t *new_loc, const char *new_name,
+ H5G_link_t type, unsigned namei_flags, hid_t dxpl_id);
+static herr_t H5G_linkval(H5G_entry_t *loc, const char *name, size_t size,
+ char *buf/*out*/, hid_t dxpl_id);
+static herr_t H5G_move(H5G_entry_t *src_loc, const char *src_name,
+ H5G_entry_t *dst_loc, const char *dst_name, hid_t dxpl_it);
+static herr_t H5G_unlink(H5G_entry_t *loc, const char *name, hid_t dxpl_id);
+static herr_t H5G_get_num_objs(H5G_t *grp, hsize_t *num_objs, hid_t dxpl_id);
+static ssize_t H5G_get_objname_by_idx(H5G_t *grp, hsize_t idx, char* name, size_t size, hid_t dxpl_id);
+static int H5G_get_objtype_by_idx(H5G_t *grp, hsize_t idx, hid_t dxpl_id);
static herr_t H5G_replace_ent(void *obj_ptr, hid_t obj_id, const void *key);
static herr_t H5G_traverse_slink(H5G_entry_t *grp_ent/*in,out*/,
- H5G_entry_t *obj_ent/*in,out*/, int *nlinks/*in,out*/);
+ H5G_entry_t *obj_ent/*in,out*/, int *nlinks/*in,out*/, hid_t dxpl_id);
+static herr_t H5G_set_comment(H5G_entry_t *loc, const char *name,
+ const char *buf, hid_t dxpl_id);
+static int H5G_get_comment(H5G_entry_t *loc, const char *name,
+ size_t bufsize, char *buf, hid_t dxpl_id);
/*-------------------------------------------------------------------------
@@ -182,7 +202,7 @@ H5Gcreate(hid_t loc_id, const char *name, size_t size_hint)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name given");
/* Create the group */
- if (NULL == (grp = H5G_create(loc, name, size_hint)))
+ if (NULL == (grp = H5G_create(loc, name, size_hint, H5AC_dxpl_id)))
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to create group");
if ((ret_value = H5I_register(H5I_GROUP, grp)) < 0)
HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register group");
@@ -233,7 +253,7 @@ H5Gopen(hid_t loc_id, const char *name)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name");
/* Open the group */
- if (NULL == (grp = H5G_open(loc, name)))
+ if (NULL == (grp = H5G_open(loc, name, H5AC_dxpl_id)))
HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open group");
/* Register an atom for the group */
if ((ret_value = H5I_register(H5I_GROUP, grp)) < 0)
@@ -341,7 +361,7 @@ H5Giterate(hid_t loc_id, const char *name, int *idx,
* Open the group on which to operate. We also create a group ID which
* we can pass to the application-defined operator.
*/
- if (NULL==(udata.group = H5G_open (loc, name)))
+ if (NULL==(udata.group = H5G_open (loc, name, H5AC_dxpl_id)))
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to open group");
if ((udata.group_id=H5I_register (H5I_GROUP, udata.group))<0) {
H5G_close(udata.group);
@@ -357,7 +377,7 @@ H5Giterate(hid_t loc_id, const char *name, int *idx,
udata.final_ent = 0;
/* Iterate over the group members */
- if ((ret_value = H5B_iterate (H5G_fileof(udata.group), H5B_SNODE,
+ if ((ret_value = H5B_iterate (H5G_fileof(udata.group), H5AC_dxpl_id, H5B_SNODE,
H5G_node_iterate, udata.group->ent.cache.stab.btree_addr, &udata))<0)
HERROR (H5E_SYM, H5E_CANTINIT, "iteration operator failed");
@@ -404,7 +424,7 @@ H5Gget_num_objs(hid_t group_id, hsize_t *num_objs)
HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "nil pointer");
/* Call private function. */
- ret_value = H5G_get_num_objs(group, num_objs);
+ ret_value = H5G_get_num_objs(group, num_objs, H5AC_dxpl_id);
done:
FUNC_LEAVE_API(ret_value);
@@ -451,13 +471,13 @@ H5Gget_objname_by_idx(hid_t group_id, hsize_t idx, char *name, size_t size)
if (!name)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "nil pointer for name");
- if (H5G_get_num_objs(group, &num_objs)<0)
+ if (H5G_get_num_objs(group, &num_objs, H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "unable to retrieve number of members");
if(idx >= num_objs)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "index out of bound");
/*call private function*/
- ret_value = H5G_get_objname_by_idx(group, idx, name, size);
+ ret_value = H5G_get_objname_by_idx(group, idx, name, size, H5AC_dxpl_id);
done:
FUNC_LEAVE_API(ret_value);
@@ -495,13 +515,13 @@ H5Gget_objtype_by_idx(hid_t group_id, hsize_t idx)
if (NULL==(group = H5I_object_verify(group_id,H5I_GROUP)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group");
- if (H5G_get_num_objs(group, &num_objs)<0)
+ if (H5G_get_num_objs(group, &num_objs, H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "unable to retrieve number of members");
if(idx >= num_objs)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "index out of bound");
/*call private function*/
- ret_value = H5G_get_objtype_by_idx(group, idx);
+ ret_value = H5G_get_objtype_by_idx(group, idx, H5AC_dxpl_id);
done:
FUNC_LEAVE_API(ret_value);
@@ -561,7 +581,7 @@ H5Gmove2(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
else if(src_loc->file != dst_loc->file)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "source and destination should be in the same file.");
- if (H5G_move(src_loc, src_name, dst_loc, dst_name)<0)
+ if (H5G_move(src_loc, src_name, dst_loc, dst_name, H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to change object name");
done:
@@ -631,7 +651,7 @@ H5Glink2(hid_t cur_loc_id, const char *cur_name, H5G_link_t type,
else if(cur_loc->file != new_loc->file)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "source and destination should be in the same file.");
- if (H5G_link(cur_loc, cur_name, new_loc, new_name, type, H5G_TARGET_NORMAL) <0)
+ if (H5G_link(cur_loc, cur_name, new_loc, new_name, type, H5G_TARGET_NORMAL, H5AC_dxpl_id) <0)
HGOTO_ERROR (H5E_SYM, H5E_LINK, FAIL, "unable to create link");
done:
@@ -674,7 +694,7 @@ H5Gunlink(hid_t loc_id, const char *name)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name");
/* Unlink */
- if (H5G_unlink(loc, name)<0)
+ if (H5G_unlink(loc, name, H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to unlink object");
done:
@@ -716,7 +736,7 @@ H5Gget_objinfo(hid_t loc_id, const char *name, hbool_t follow_link,
HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified");
/* Get info */
- if (H5G_get_objinfo (loc, name, follow_link, statbuf)<0)
+ if (H5G_get_objinfo (loc, name, follow_link, statbuf, H5AC_dxpl_id)<0)
HGOTO_ERROR (H5E_ARGS, H5E_CANTINIT, FAIL, "cannot stat object");
done:
@@ -758,7 +778,7 @@ H5Gget_linkval(hid_t loc_id, const char *name, size_t size, char *buf/*out*/)
HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified");
/* Get the link value */
- if (H5G_linkval (loc, name, size, buf)<0)
+ if (H5G_linkval (loc, name, size, buf, H5AC_dxpl_id)<0)
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to get link value");
done:
@@ -797,7 +817,7 @@ H5Gset_comment(hid_t loc_id, const char *name, const char *comment)
if (!name || !*name)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified");
- if (H5G_set_comment(loc, name, comment)<0)
+ if (H5G_set_comment(loc, name, comment, H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to set comment value");
done:
@@ -844,7 +864,7 @@ H5Gget_comment(hid_t loc_id, const char *name, size_t bufsize, char *buf)
if (bufsize>0 && !buf)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no buffer specified");
- if ((ret_value=H5G_get_comment(loc, name, bufsize, buf))<0)
+ if ((ret_value=H5G_get_comment(loc, name, bufsize, buf, H5AC_dxpl_id))<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to get comment value");
done:
@@ -973,7 +993,7 @@ H5G_term_interface(void)
*-------------------------------------------------------------------------
*/
herr_t
-H5G_register_type(int type, htri_t(*isa)(H5G_entry_t*), const char *_desc)
+H5G_register_type(int type, htri_t(*isa)(H5G_entry_t*, hid_t), const char *_desc)
{
char *desc = NULL;
size_t i;
@@ -1207,7 +1227,7 @@ static herr_t
H5G_namei(H5G_entry_t *loc_ent, const char *name, const char **rest/*out*/,
H5G_entry_t *grp_ent/*out*/, H5G_entry_t *obj_ent/*out*/,
unsigned target, int *nlinks/*out*/, H5G_namei_act_t action,
- H5G_entry_t *ent)
+ H5G_entry_t *ent, hid_t dxpl_id)
{
H5G_entry_t _grp_ent; /*entry for current group */
H5G_entry_t _obj_ent; /*entry found */
@@ -1320,7 +1340,7 @@ H5G_namei(H5G_entry_t *loc_ent, const char *name, const char **rest/*out*/,
switch(action) {
case H5G_NAMEI_TRAVERSE:
- if (H5G_stab_find(grp_ent, H5G_comp_g, obj_ent/*out*/ )<0) {
+ if (H5G_stab_find(grp_ent, H5G_comp_g, obj_ent/*out*/, dxpl_id )<0) {
/*
* Component was not found in the current symbol table, possibly
* because GRP_ENT isn't a symbol table.
@@ -1331,7 +1351,7 @@ H5G_namei(H5G_entry_t *loc_ent, const char *name, const char **rest/*out*/,
case H5G_NAMEI_INSERT:
if(!last_comp) {
- if (H5G_stab_find(grp_ent, H5G_comp_g, obj_ent/*out*/ )<0) {
+ if (H5G_stab_find(grp_ent, H5G_comp_g, obj_ent/*out*/, dxpl_id )<0) {
/*
* Component was not found in the current symbol table, possibly
* because GRP_ENT isn't a symbol table.
@@ -1340,7 +1360,7 @@ H5G_namei(H5G_entry_t *loc_ent, const char *name, const char **rest/*out*/,
}
} /* end if */
else {
- if (H5G_stab_insert(grp_ent, H5G_comp_g, ent) < 0)
+ if (H5G_stab_insert(grp_ent, H5G_comp_g, ent, dxpl_id) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINSERT, FAIL, "unable to insert name");
HGOTO_DONE(SUCCEED);
} /* end else */
@@ -1356,7 +1376,7 @@ H5G_namei(H5G_entry_t *loc_ent, const char *name, const char **rest/*out*/,
(0==(target & H5G_TARGET_SLINK) || !last_comp)) {
if ((*nlinks)-- <= 0)
HGOTO_ERROR (H5E_SYM, H5E_SLINK, FAIL, "too many symbolic links");
- if (H5G_traverse_slink (grp_ent, obj_ent, nlinks)<0)
+ if (H5G_traverse_slink (grp_ent, obj_ent, nlinks, dxpl_id)<0)
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "symbolic link traversal failed");
}
@@ -1414,7 +1434,7 @@ done:
static herr_t
H5G_traverse_slink (H5G_entry_t *grp_ent/*in,out*/,
H5G_entry_t *obj_ent/*in,out*/,
- int *nlinks/*in,out*/)
+ int *nlinks/*in,out*/, hid_t dxpl_id)
{
H5O_stab_t stab_mesg; /*info about local heap */
const char *clv = NULL; /*cached link value */
@@ -1429,9 +1449,9 @@ H5G_traverse_slink (H5G_entry_t *grp_ent/*in,out*/,
HDmemset(&tmp_grp_ent,0,sizeof(H5G_entry_t));
/* Get the link value */
- if (NULL==H5O_read (grp_ent, H5O_STAB, 0, &stab_mesg))
+ if (NULL==H5O_read (grp_ent, H5O_STAB, 0, &stab_mesg, dxpl_id))
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to determine local heap address");
- if (NULL==(clv=H5HL_peek (grp_ent->file, stab_mesg.heap_addr,
+ if (NULL==(clv=H5HL_peek (grp_ent->file, dxpl_id, stab_mesg.heap_addr,
obj_ent->cache.slink.lval_offset)))
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read symbolic link value");
linkval = H5MM_xstrdup (clv);
@@ -1449,7 +1469,7 @@ H5G_traverse_slink (H5G_entry_t *grp_ent/*in,out*/,
H5G_ent_copy(&tmp_grp_ent,grp_ent,H5G_COPY_DEEP);
/* Traverse the link */
- if (H5G_namei (&tmp_grp_ent, linkval, NULL, grp_ent, obj_ent, H5G_TARGET_NORMAL, nlinks, H5G_NAMEI_TRAVERSE, NULL))
+ if (H5G_namei (&tmp_grp_ent, linkval, NULL, grp_ent, obj_ent, H5G_TARGET_NORMAL, nlinks, H5G_NAMEI_TRAVERSE, NULL, dxpl_id))
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to follow symbolic link");
/* Free the entry's names, we will use the original name for the object */
@@ -1500,7 +1520,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5G_mkroot (H5F_t *f, H5G_entry_t *ent)
+H5G_mkroot (H5F_t *f, hid_t dxpl_id, H5G_entry_t *ent)
{
H5G_entry_t new_root; /*new root object */
H5O_stab_t stab; /*symbol table message */
@@ -1520,9 +1540,9 @@ H5G_mkroot (H5F_t *f, H5G_entry_t *ent)
if (!ent) {
ent = &new_root;
HDmemset(ent, 0, sizeof(H5G_entry_t));
- if (H5G_stab_create (f, 256, ent/*out*/)<0)
+ if (H5G_stab_create (f, dxpl_id, 256, ent/*out*/)<0)
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to create root group");
- if (1 != H5O_link (ent, 1))
+ if (1 != H5O_link (ent, 1, dxpl_id))
HGOTO_ERROR (H5E_SYM, H5E_LINK, FAIL, "internal error (wrong link count)");
} else {
/*
@@ -1530,7 +1550,7 @@ H5G_mkroot (H5F_t *f, H5G_entry_t *ent)
*/
if (H5O_open (ent)<0)
HGOTO_ERROR (H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open root group");
- if (NULL==H5O_read (ent, H5O_STAB, 0, &stab)) {
+ if (NULL==H5O_read (ent, H5O_STAB, 0, &stab, dxpl_id)) {
H5O_close(ent);
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "root object is not a group");
}
@@ -1586,8 +1606,8 @@ done:
*
*-------------------------------------------------------------------------
*/
-H5G_t *
-H5G_create(H5G_entry_t *loc, const char *name, size_t size_hint)
+static H5G_t *
+H5G_create(H5G_entry_t *loc, const char *name, size_t size_hint, hid_t dxpl_id)
{
H5G_t *grp = NULL; /*new group */
H5F_t *file; /* File new group will be in */
@@ -1604,15 +1624,15 @@ H5G_create(H5G_entry_t *loc, const char *name, size_t size_hint)
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
/* What file is the group being added to? */
- if (NULL==(file=H5G_insertion_file(loc, name)))
+ if (NULL==(file=H5G_insertion_file(loc, name, dxpl_id)))
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, NULL, "unable to locate insertion point");
/* Create the group entry */
- if (H5G_stab_create(file, size_hint, &(grp->ent)/*out*/) < 0)
+ if (H5G_stab_create(file, dxpl_id, size_hint, &(grp->ent)/*out*/) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, NULL, "can't create grp");
/* insert child name into parent */
- if(H5G_insert(loc,name,&(grp->ent))<0)
+ if(H5G_insert(loc,name,&(grp->ent), dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINSERT, NULL, "can't insert group");
grp->nref = 1;
@@ -1649,8 +1669,8 @@ done:
*
*-------------------------------------------------------------------------
*/
-htri_t
-H5G_isa(H5G_entry_t *ent)
+static htri_t
+H5G_isa(H5G_entry_t *ent, hid_t dxpl_id)
{
htri_t ret_value;
@@ -1658,7 +1678,7 @@ H5G_isa(H5G_entry_t *ent)
assert(ent);
- if ((ret_value=H5O_exists(ent, H5O_STAB, 0))<0)
+ if ((ret_value=H5O_exists(ent, H5O_STAB, 0, dxpl_id))<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to read object header");
done:
@@ -1688,7 +1708,7 @@ done:
*-------------------------------------------------------------------------
*/
H5G_t *
-H5G_open(H5G_entry_t *loc, const char *name)
+H5G_open(H5G_entry_t *loc, const char *name, hid_t dxpl_id)
{
H5G_t *grp = NULL;
H5G_t *ret_value = NULL;
@@ -1701,11 +1721,11 @@ H5G_open(H5G_entry_t *loc, const char *name)
assert(name && *name);
/* Open the object, making sure it's a group */
- if (H5G_find(loc, name, NULL, &ent/*out*/) < 0)
+ if (H5G_find(loc, name, NULL, &ent/*out*/, dxpl_id) < 0)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "group not found");
/* Open the group object */
- if ((grp=H5G_open_oid(&ent)) ==NULL)
+ if ((grp=H5G_open_oid(&ent, dxpl_id)) ==NULL)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "not found");
/* Set return value */
@@ -1740,7 +1760,7 @@ done:
*-------------------------------------------------------------------------
*/
H5G_t *
-H5G_open_oid(H5G_entry_t *ent)
+H5G_open_oid(H5G_entry_t *ent, hid_t dxpl_id)
{
H5G_t *grp = NULL;
H5G_t *ret_value = NULL;
@@ -1761,7 +1781,7 @@ H5G_open_oid(H5G_entry_t *ent)
/* Grab the object header */
if (H5O_open(&(grp->ent)) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, NULL, "unable to open group");
- if (NULL==H5O_read (&(grp->ent), H5O_STAB, 0, &mesg)) {
+ if (NULL==H5O_read (&(grp->ent), H5O_STAB, 0, &mesg, dxpl_id)) {
H5O_close(&(grp->ent));
HGOTO_ERROR (H5E_SYM, H5E_CANTOPENOBJ, NULL, "not a group");
}
@@ -1777,6 +1797,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value);
}
+#ifdef NOT_YET
/*-------------------------------------------------------------------------
* Function: H5G_reopen
@@ -1812,6 +1833,7 @@ H5G_reopen(H5G_t *grp)
done:
FUNC_LEAVE_NOAPI(ret_value);
}
+#endif /* NOT_YET */
/*-------------------------------------------------------------------------
@@ -1911,7 +1933,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5G_insert(H5G_entry_t *loc, const char *name, H5G_entry_t *ent)
+H5G_insert(H5G_entry_t *loc, const char *name, H5G_entry_t *ent, hid_t dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -1925,13 +1947,13 @@ H5G_insert(H5G_entry_t *loc, const char *name, H5G_entry_t *ent)
/*
* Lookup and insert the name -- it shouldn't exist yet.
*/
- if (H5G_namei(loc, name, NULL, NULL, NULL, H5G_TARGET_NORMAL, NULL, H5G_NAMEI_INSERT, ent)<0)
+ if (H5G_namei(loc, name, NULL, NULL, NULL, H5G_TARGET_NORMAL, NULL, H5G_NAMEI_INSERT, ent, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_EXISTS, FAIL, "already exists");
/*
* Insert the object into a symbol table.
*/
- if (H5O_link(ent, 1) < 0)
+ if (H5O_link(ent, 1, dxpl_id) < 0)
HGOTO_ERROR(H5E_SYM, H5E_LINK, FAIL, "unable to increment hard link count");
done:
@@ -1968,7 +1990,7 @@ done:
*/
herr_t
H5G_find(H5G_entry_t *loc, const char *name,
- H5G_entry_t *grp_ent/*out*/, H5G_entry_t *obj_ent/*out*/)
+ H5G_entry_t *grp_ent/*out*/, H5G_entry_t *obj_ent/*out*/, hid_t dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -1978,7 +2000,7 @@ H5G_find(H5G_entry_t *loc, const char *name,
assert (loc);
assert (name && *name);
- if (H5G_namei(loc, name, NULL, grp_ent, obj_ent, H5G_TARGET_NORMAL, NULL, H5G_NAMEI_TRAVERSE, NULL)<0)
+ if (H5G_namei(loc, name, NULL, grp_ent, obj_ent, H5G_TARGET_NORMAL, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
done:
@@ -2146,9 +2168,9 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
+static herr_t
H5G_link (H5G_entry_t *cur_loc, const char *cur_name, H5G_entry_t *new_loc,
- const char *new_name, H5G_link_t type, unsigned namei_flags)
+ const char *new_name, H5G_link_t type, unsigned namei_flags, hid_t dxpl_id)
{
H5G_entry_t cur_obj; /*entry for the link tail */
H5G_entry_t grp_ent; /*ent for grp containing link hd*/
@@ -2174,7 +2196,7 @@ H5G_link (H5G_entry_t *cur_loc, const char *cur_name, H5G_entry_t *new_loc,
* the new entry. The entry shouldn't exist yet.
*/
if (H5G_namei(new_loc, new_name, &rest, &grp_ent, NULL,
- H5G_TARGET_NORMAL, NULL, H5G_NAMEI_TRAVERSE, NULL)>=0)
+ H5G_TARGET_NORMAL, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)>=0)
HGOTO_ERROR (H5E_SYM, H5E_EXISTS, FAIL, "already exists");
H5E_clear (); /*it's okay that we didn't find it*/
rest = H5G_component (rest, &nchars);
@@ -2199,9 +2221,9 @@ H5G_link (H5G_entry_t *cur_loc, const char *cur_name, H5G_entry_t *new_loc,
* Add the link-value to the local heap for the symbol table which
* will contain the link.
*/
- if (NULL==H5O_read (&grp_ent, H5O_STAB, 0, &stab_mesg))
+ if (NULL==H5O_read (&grp_ent, H5O_STAB, 0, &stab_mesg, dxpl_id))
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to determine local heap address");
- if ((size_t)(-1)==(offset=H5HL_insert (grp_ent.file,
+ if ((size_t)(-1)==(offset=H5HL_insert (grp_ent.file, dxpl_id,
stab_mesg.heap_addr, HDstrlen(cur_name)+1, cur_name)))
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to write link value to local heap");
H5O_reset (H5O_STAB, &stab_mesg);
@@ -2223,14 +2245,14 @@ H5G_link (H5G_entry_t *cur_loc, const char *cur_name, H5G_entry_t *new_loc,
* writable). But if it does, the only side effect is that the local
* heap has some extra garbage in it.
*/
- if (H5G_stab_insert (&grp_ent, rest, &cur_obj)<0)
+ if (H5G_stab_insert (&grp_ent, rest, &cur_obj, dxpl_id)<0)
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to create new name/link for object");
break;
case H5G_LINK_HARD:
- if (H5G_namei(cur_loc, cur_name, NULL, NULL, &cur_obj, namei_flags, NULL, H5G_NAMEI_TRAVERSE, NULL)<0)
+ if (H5G_namei(cur_loc, cur_name, NULL, NULL, &cur_obj, namei_flags, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "source object not found");
- if (H5G_insert (new_loc, new_name, &cur_obj)<0)
+ if (H5G_insert (new_loc, new_name, &cur_obj, dxpl_id)<0)
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to create new name/link for object");
break;
@@ -2267,7 +2289,7 @@ done:
*-------------------------------------------------------------------------
*/
int
-H5G_get_type(H5G_entry_t *ent)
+H5G_get_type(H5G_entry_t *ent, hid_t dxpl_id)
{
htri_t isa;
size_t i;
@@ -2276,7 +2298,7 @@ H5G_get_type(H5G_entry_t *ent)
FUNC_ENTER_NOAPI(H5G_get_type, H5G_UNKNOWN);
for (i=H5G_ntypes_g; i>0; --i) {
- if ((isa=(H5G_type_g[i-1].isa)(ent))<0) {
+ if ((isa=(H5G_type_g[i-1].isa)(ent, dxpl_id))<0) {
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5G_UNKNOWN, "unable to determine object type");
} else if (isa) {
HGOTO_DONE(H5G_type_g[i-1].type);
@@ -2314,7 +2336,7 @@ done:
*/
herr_t
H5G_get_objinfo (H5G_entry_t *loc, const char *name, hbool_t follow_link,
- H5G_stat_t *statbuf/*out*/)
+ H5G_stat_t *statbuf/*out*/, hid_t dxpl_id)
{
H5O_stab_t stab_mesg;
H5G_entry_t grp_ent, obj_ent;
@@ -2329,7 +2351,7 @@ H5G_get_objinfo (H5G_entry_t *loc, const char *name, hbool_t follow_link,
/* Find the object's symbol table entry */
if (H5G_namei(loc, name, NULL, &grp_ent/*out*/, &obj_ent/*out*/,
- (unsigned)(follow_link?H5G_TARGET_NORMAL:H5G_TARGET_SLINK), NULL, H5G_NAMEI_TRAVERSE, NULL)<0)
+ (unsigned)(follow_link?H5G_TARGET_NORMAL:H5G_TARGET_SLINK), NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to stat object");
/*
@@ -2340,8 +2362,8 @@ H5G_get_objinfo (H5G_entry_t *loc, const char *name, hbool_t follow_link,
if (statbuf) {
if (H5G_CACHED_SLINK==obj_ent.type) {
/* Named object is a symbolic link */
- if (NULL==H5O_read (&grp_ent, H5O_STAB, 0, &stab_mesg) ||
- NULL==(s=H5HL_peek (grp_ent.file, stab_mesg.heap_addr,
+ if (NULL==H5O_read (&grp_ent, H5O_STAB, 0, &stab_mesg, dxpl_id) ||
+ NULL==(s=H5HL_peek (grp_ent.file, dxpl_id, stab_mesg.heap_addr,
obj_ent.cache.slink.lval_offset)))
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to read symbolic link value");
statbuf->linklen = HDstrlen(s)+1; /*count the null terminator*/
@@ -2359,16 +2381,16 @@ H5G_get_objinfo (H5G_entry_t *loc, const char *name, hbool_t follow_link,
#else
statbuf->objno[1] = 0;
#endif
- statbuf->nlink = H5O_link (&obj_ent, 0);
+ statbuf->nlink = H5O_link (&obj_ent, 0, dxpl_id);
statbuf->type = H5G_LINK;
- if (NULL==H5O_read(&obj_ent, H5O_MTIME, 0, &(statbuf->mtime))) {
+ if (NULL==H5O_read(&obj_ent, H5O_MTIME, 0, &(statbuf->mtime), dxpl_id)) {
H5E_clear();
- if (NULL==H5O_read(&obj_ent, H5O_MTIME_NEW, 0, &(statbuf->mtime))) {
+ if (NULL==H5O_read(&obj_ent, H5O_MTIME_NEW, 0, &(statbuf->mtime), dxpl_id)) {
H5E_clear();
statbuf->mtime = 0;
}
}
- statbuf->type = H5G_get_type(&obj_ent);
+ statbuf->type = H5G_get_type(&obj_ent, dxpl_id);
H5E_clear(); /*clear errors resulting from checking type*/
}
@@ -2404,8 +2426,8 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5G_get_num_objs(H5G_t *grp, hsize_t *num_objs)
+static herr_t
+H5G_get_num_objs(H5G_t *grp, hsize_t *num_objs, hid_t dxpl_id)
{
herr_t ret_value;
@@ -2413,7 +2435,7 @@ H5G_get_num_objs(H5G_t *grp, hsize_t *num_objs)
*num_objs = 0;
/* Iterate over the group members */
- if ((ret_value = H5B_iterate (H5G_fileof(grp), H5B_SNODE,
+ if ((ret_value = H5B_iterate (H5G_fileof(grp), dxpl_id, H5B_SNODE,
H5G_node_sumup, grp->ent.cache.stab.btree_addr, num_objs))<0)
HERROR (H5E_SYM, H5E_CANTINIT, "iteration operator failed");
@@ -2439,8 +2461,8 @@ done:
*
*-------------------------------------------------------------------------
*/
-ssize_t
-H5G_get_objname_by_idx(H5G_t *grp, hsize_t idx, char* name, size_t size)
+static ssize_t
+H5G_get_objname_by_idx(H5G_t *grp, hsize_t idx, char* name, size_t size, hid_t dxpl_id)
{
ssize_t ret_value;
H5G_bt_ud3_t udata;
@@ -2453,7 +2475,7 @@ H5G_get_objname_by_idx(H5G_t *grp, hsize_t idx, char* name, size_t size)
udata.name = NULL;
/* Iterate over the group members */
- if ((ret_value = H5B_iterate (H5G_fileof(grp), H5B_SNODE,
+ if ((ret_value = H5B_iterate (H5G_fileof(grp), dxpl_id, H5B_SNODE,
H5G_node_name, grp->ent.cache.stab.btree_addr, &udata))<0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "iteration operator failed");
@@ -2489,20 +2511,20 @@ done:
*
*-------------------------------------------------------------------------
*/
-int
-H5G_get_objtype_by_idx(H5G_t *grp, hsize_t idx)
+static int
+H5G_get_objtype_by_idx(H5G_t *grp, hsize_t idx, hid_t dxpl_id)
{
int ret_value = FAIL;
H5G_bt_ud3_t udata;
- FUNC_ENTER_NOAPI(H5G_get_objname_by_idx, FAIL);
+ FUNC_ENTER_NOAPI(H5G_get_objtype_by_idx, FAIL);
udata.idx = idx;
udata.num_objs = 0;
udata.group = grp;
/* Iterate over the group members */
- if ((ret_value = H5B_iterate (H5G_fileof(grp), H5B_SNODE,
+ if ((ret_value = H5B_iterate (H5G_fileof(grp), dxpl_id, H5B_SNODE,
H5G_node_type, grp->ent.cache.stab.btree_addr, &udata))<0)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "iteration operator failed");
@@ -2536,8 +2558,8 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5G_linkval (H5G_entry_t *loc, const char *name, size_t size, char *buf/*out*/)
+static herr_t
+H5G_linkval (H5G_entry_t *loc, const char *name, size_t size, char *buf/*out*/, hid_t dxpl_id)
{
const char *s = NULL;
H5G_entry_t grp_ent, obj_ent;
@@ -2551,7 +2573,7 @@ H5G_linkval (H5G_entry_t *loc, const char *name, size_t size, char *buf/*out*/)
* entry for the group in which the link head appears.
*/
if (H5G_namei(loc, name, NULL, &grp_ent/*out*/, &obj_ent/*out*/,
- H5G_TARGET_SLINK, NULL, H5G_NAMEI_TRAVERSE, NULL)<0)
+ H5G_TARGET_SLINK, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "symbolic link was not found");
if (H5G_CACHED_SLINK!=obj_ent.type)
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "object is not a symbolic link");
@@ -2560,9 +2582,9 @@ H5G_linkval (H5G_entry_t *loc, const char *name, size_t size, char *buf/*out*/)
* Get the address of the local heap for the link value and a pointer
* into that local heap.
*/
- if (NULL==H5O_read (&grp_ent, H5O_STAB, 0, &stab_mesg))
+ if (NULL==H5O_read (&grp_ent, H5O_STAB, 0, &stab_mesg, dxpl_id))
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to determine local heap address");
- if (NULL==(s=H5HL_peek (grp_ent.file, stab_mesg.heap_addr,
+ if (NULL==(s=H5HL_peek (grp_ent.file, dxpl_id, stab_mesg.heap_addr,
obj_ent.cache.slink.lval_offset)))
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to read symbolic link value");
@@ -2596,8 +2618,8 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5G_set_comment(H5G_entry_t *loc, const char *name, const char *buf)
+static herr_t
+H5G_set_comment(H5G_entry_t *loc, const char *name, const char *buf, hid_t dxpl_id)
{
H5G_entry_t obj_ent;
H5O_name_t comment;
@@ -2607,16 +2629,17 @@ H5G_set_comment(H5G_entry_t *loc, const char *name, const char *buf)
/* Get the symbol table entry for the object */
if (H5G_namei(loc, name, NULL, NULL, &obj_ent/*out*/, H5G_TARGET_NORMAL,
- NULL, H5G_NAMEI_TRAVERSE, NULL)<0)
+ NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
/* Remove the previous comment message if any */
- if (H5O_remove(&obj_ent, H5O_NAME, 0)<0) H5E_clear();
+ if (H5O_remove(&obj_ent, H5O_NAME, 0, dxpl_id)<0)
+ H5E_clear();
/* Add the new message */
if (buf && *buf) {
comment.s = H5MM_xstrdup(buf);
- if (H5O_modify(&obj_ent, H5O_NAME, H5O_NEW_MESG, 0, 1, &comment)<0)
+ if (H5O_modify(&obj_ent, H5O_NAME, H5O_NEW_MESG, 0, 1, &comment, dxpl_id)<0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to set comment object header message");
H5O_reset(H5O_NAME, &comment);
}
@@ -2650,8 +2673,8 @@ done:
*
*-------------------------------------------------------------------------
*/
-int
-H5G_get_comment(H5G_entry_t *loc, const char *name, size_t bufsize, char *buf)
+static int
+H5G_get_comment(H5G_entry_t *loc, const char *name, size_t bufsize, char *buf, hid_t dxpl_id)
{
H5O_name_t comment;
H5G_entry_t obj_ent;
@@ -2661,12 +2684,12 @@ H5G_get_comment(H5G_entry_t *loc, const char *name, size_t bufsize, char *buf)
/* Get the symbol table entry for the object */
if (H5G_namei(loc, name, NULL, NULL, &obj_ent/*out*/, H5G_TARGET_NORMAL,
- NULL, H5G_NAMEI_TRAVERSE, NULL)<0)
+ NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
/* Get the message */
comment.s = NULL;
- if (NULL==H5O_read(&obj_ent, H5O_NAME, 0, &comment)) {
+ if (NULL==H5O_read(&obj_ent, H5O_NAME, 0, &comment, dxpl_id)) {
if (buf && bufsize>0)
buf[0] = '\0';
ret_value = 0;
@@ -2702,8 +2725,8 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5G_unlink(H5G_entry_t *loc, const char *name)
+static herr_t
+H5G_unlink(H5G_entry_t *loc, const char *name, hid_t dxpl_id)
{
H5G_entry_t grp_ent, obj_ent;
size_t len;
@@ -2721,12 +2744,12 @@ H5G_unlink(H5G_entry_t *loc, const char *name)
HDmemset(&obj_ent,0,sizeof(H5G_entry_t));
/* Get object type before unlink */
- if (H5G_get_objinfo(loc, name, FALSE, &statbuf)<0)
+ if (H5G_get_objinfo(loc, name, FALSE, &statbuf, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
/* Get the entry for the group that contains the object to be unlinked */
if (H5G_namei(loc, name, NULL, &grp_ent, &obj_ent,
- H5G_TARGET_SLINK|H5G_TARGET_MOUNT, NULL, H5G_NAMEI_TRAVERSE, NULL)<0)
+ H5G_TARGET_SLINK|H5G_TARGET_MOUNT, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
if (!H5F_addr_defined(grp_ent.header))
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "no containing group specified");
@@ -2734,7 +2757,7 @@ H5G_unlink(H5G_entry_t *loc, const char *name)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "problems obtaining object base name");
/* Remove the name from the symbol table */
- if (H5G_stab_remove(&grp_ent, base)<0)
+ if (H5G_stab_remove(&grp_ent, base, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to unlink name from symbol table");
/* Search the open IDs and replace names for unlinked object */
@@ -2773,9 +2796,9 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
+static herr_t
H5G_move(H5G_entry_t *src_loc, const char *src_name, H5G_entry_t *dst_loc,
- const char *dst_name)
+ const char *dst_name, hid_t dxpl_id)
{
H5G_stat_t sb;
char *linkval=NULL;
@@ -2791,7 +2814,7 @@ H5G_move(H5G_entry_t *src_loc, const char *src_name, H5G_entry_t *dst_loc,
assert(src_name && *src_name);
assert(dst_name && *dst_name);
- if (H5G_get_objinfo(src_loc, src_name, FALSE, &sb)<0)
+ if (H5G_get_objinfo(src_loc, src_name, FALSE, &sb, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
if (H5G_LINK==sb.type) {
/*
@@ -2802,11 +2825,11 @@ H5G_move(H5G_entry_t *src_loc, const char *src_name, H5G_entry_t *dst_loc,
if (NULL==(linkval=H5MM_realloc(linkval, 2*lv_size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate space for symbolic link value");
linkval[lv_size-1] = '\0';
- if (H5G_linkval(src_loc, src_name, lv_size, linkval)<0)
+ if (H5G_linkval(src_loc, src_name, lv_size, linkval, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to read symbolic link value");
} while (linkval[lv_size-1]);
if (H5G_link(src_loc, linkval, dst_loc, dst_name, H5G_LINK_SOFT,
- H5G_TARGET_NORMAL)<0)
+ H5G_TARGET_NORMAL, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to rename symbolic link");
H5MM_xfree(linkval);
@@ -2815,7 +2838,7 @@ H5G_move(H5G_entry_t *src_loc, const char *src_name, H5G_entry_t *dst_loc,
* Rename the object.
*/
if (H5G_link(src_loc, src_name, dst_loc, dst_name, H5G_LINK_HARD,
- H5G_TARGET_MOUNT)<0)
+ H5G_TARGET_MOUNT, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to register new name for object");
}
@@ -2823,7 +2846,7 @@ H5G_move(H5G_entry_t *src_loc, const char *src_name, H5G_entry_t *dst_loc,
* This has to be done here because H5G_link and H5G_unlink have
* internal object entries, and do not modify the entries list
*/
- if (H5G_namei(src_loc, src_name, NULL, NULL, &obj_ent, H5G_TARGET_NORMAL|H5G_TARGET_SLINK, NULL, H5G_NAMEI_TRAVERSE, NULL))
+ if (H5G_namei(src_loc, src_name, NULL, NULL, &obj_ent, H5G_TARGET_NORMAL|H5G_TARGET_SLINK, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id))
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to follow symbolic link");
src_name_r=H5RS_wrap(src_name);
assert(src_name_r);
@@ -2836,7 +2859,7 @@ H5G_move(H5G_entry_t *src_loc, const char *src_name, H5G_entry_t *dst_loc,
H5G_free_ent_name(&obj_ent);
/* Remove the old name */
- if (H5G_unlink(src_loc, src_name)<0)
+ if (H5G_unlink(src_loc, src_name, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to deregister old object name");
done:
@@ -2866,7 +2889,7 @@ done:
*-------------------------------------------------------------------------
*/
H5F_t *
-H5G_insertion_file(H5G_entry_t *loc, const char *name)
+H5G_insertion_file(H5G_entry_t *loc, const char *name, hid_t dxpl_id)
{
H5F_t *ret_value; /* Return value */
@@ -2889,7 +2912,7 @@ H5G_insertion_file(H5G_entry_t *loc, const char *name)
* Look up the name to get the containing group and to make sure the name
* doesn't already exist.
*/
- if (H5G_namei(loc, name, &rest, &grp_ent, NULL, H5G_TARGET_NORMAL, NULL, H5G_NAMEI_TRAVERSE, NULL)>=0) {
+ if (H5G_namei(loc, name, &rest, &grp_ent, NULL, H5G_TARGET_NORMAL, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)>=0) {
H5G_free_ent_name(&grp_ent);
HGOTO_ERROR(H5E_SYM, H5E_EXISTS, NULL, "name already exists");
} /* end if */
diff --git a/src/H5Gent.c b/src/H5Gent.c
index e8732f1..60ad89b 100644
--- a/src/H5Gent.c
+++ b/src/H5Gent.c
@@ -430,7 +430,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5G_ent_debug(H5F_t UNUSED *f, const H5G_entry_t *ent, FILE * stream,
+H5G_ent_debug(H5F_t UNUSED *f, hid_t dxpl_id, const H5G_entry_t *ent, FILE * stream,
int indent, int fwidth, haddr_t heap)
{
const char *lval = NULL;
@@ -471,7 +471,7 @@ H5G_ent_debug(H5F_t UNUSED *f, const H5G_entry_t *ent, FILE * stream,
"Link value offset:",
(unsigned long)(ent->cache.slink.lval_offset));
if (H5F_addr_defined(heap)) {
- lval = H5HL_peek (ent->file, heap, ent->cache.slink.lval_offset);
+ lval = H5HL_peek (ent->file, dxpl_id, heap, ent->cache.slink.lval_offset);
HDfprintf (stream, "%*s%-*s %s\n", indent, "", fwidth,
"Link value:",
lval);
diff --git a/src/H5Gnode.c b/src/H5Gnode.c
index c07b8d6..25463d8 100644
--- a/src/H5Gnode.c
+++ b/src/H5Gnode.c
@@ -43,25 +43,26 @@ static herr_t H5G_node_decode_key(H5F_t *f, H5B_t *bt, uint8_t *raw,
static herr_t H5G_node_encode_key(H5F_t *f, H5B_t *bt, uint8_t *raw,
void *_key);
static size_t H5G_node_size(H5F_t *f);
-static herr_t H5G_node_create(H5F_t *f, H5B_ins_t op, void *_lt_key,
- void *_udata, void *_rt_key,
- haddr_t *addr_p/*out*/);
-static herr_t H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
- H5G_node_t *sym);
static H5G_node_t *H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_udata1,
void *_udata2);
-static int H5G_node_cmp2(H5F_t *f, void *_lt_key, void *_udata,
+static herr_t H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
+ H5G_node_t *sym);
+static herr_t H5G_node_dest(H5F_t *f, H5G_node_t *sym);
+static herr_t H5G_node_create(H5F_t *f, hid_t dxpl_id, H5B_ins_t op, void *_lt_key,
+ void *_udata, void *_rt_key,
+ haddr_t *addr_p/*out*/);
+static int H5G_node_cmp2(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata,
void *_rt_key);
-static int H5G_node_cmp3(H5F_t *f, void *_lt_key, void *_udata,
+static int H5G_node_cmp3(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata,
void *_rt_key);
-static herr_t H5G_node_found(H5F_t *f, haddr_t addr, const void *_lt_key,
+static herr_t H5G_node_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_lt_key,
void *_udata, const void *_rt_key);
-static H5B_ins_t H5G_node_insert(H5F_t *f, haddr_t addr, void *_lt_key,
+static H5B_ins_t H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
hbool_t *lt_key_changed, void *_md_key,
void *_udata, void *_rt_key,
hbool_t *rt_key_changed,
haddr_t *new_node_p/*out*/);
-static H5B_ins_t H5G_node_remove(H5F_t *f, haddr_t addr, void *lt_key,
+static H5B_ins_t H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *lt_key,
hbool_t *lt_key_changed, void *udata,
void *rt_key, hbool_t *rt_key_changed);
static size_t H5G_node_sizeof_rkey(H5F_t *f, const void *_udata);
@@ -71,6 +72,7 @@ const H5AC_class_t H5AC_SNODE[1] = {{
H5AC_SNODE_ID,
(H5AC_load_func_t)H5G_node_load,
(H5AC_flush_func_t)H5G_node_flush,
+ (H5AC_dest_func_t)H5G_node_dest,
}};
/* H5G inherits B-tree like properties from H5B */
@@ -229,74 +231,88 @@ H5G_node_size(H5F_t *f)
/*-------------------------------------------------------------------------
- * Function: H5G_node_create
+ * Function: H5G_node_load
*
- * Purpose: Creates a new empty symbol table node. This function is
- * called by the B-tree insert function for an empty tree. It
- * is also called internally to split a symbol node with LT_KEY
- * and RT_KEY null pointers.
+ * Purpose: Loads a symbol table node from the file.
*
- * Return: Success: Non-negative. The address of symbol table
- * node is returned through the ADDR_P argument.
+ * Return: Success: Ptr to the new table.
*
- * Failure: Negative
+ * Failure: NULL
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jun 23 1997
*
* Modifications:
+ * Robb Matzke, 1999-07-28
+ * The ADDR argument is passed by value.
*
+ * Quincey Koziol, 2002-7-180
+ * Added dxpl parameter to allow more control over I/O from metadata
+ * cache.
*-------------------------------------------------------------------------
*/
-static herr_t
-H5G_node_create(H5F_t *f, H5B_ins_t UNUSED op, void *_lt_key,
- void UNUSED *_udata, void *_rt_key, haddr_t *addr_p/*out*/)
+static H5G_node_t *
+H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED _udata1,
+ void * UNUSED _udata2)
{
- H5G_node_key_t *lt_key = (H5G_node_key_t *) _lt_key;
- H5G_node_key_t *rt_key = (H5G_node_key_t *) _rt_key;
H5G_node_t *sym = NULL;
- hsize_t size = 0;
- herr_t ret_value=SUCCEED; /* Return value */
+ size_t size = 0;
+ uint8_t *buf = NULL;
+ const uint8_t *p = NULL;
+ H5G_node_t *ret_value; /*for error handling */
- FUNC_ENTER_NOAPI(H5G_node_create, FAIL);
+ FUNC_ENTER_NOAPI(H5G_node_load, NULL);
/*
* Check arguments.
*/
assert(f);
- assert(H5B_INS_FIRST == op);
+ assert(H5F_addr_defined(addr));
+ assert(!_udata1);
+ assert(NULL == _udata2);
- if (NULL==(sym = H5FL_CALLOC(H5G_node_t)))
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- size = H5G_node_size(f);
- if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_BTREE, size)))
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to allocate file space");
- sym->dirty = TRUE;
- sym->entry = H5FL_ARR_CALLOC(H5G_entry_t,(2*H5F_SYM_LEAF_K(f)));
- if (NULL==sym->entry)
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- if (H5AC_set(f, H5AC_SNODE, *addr_p, sym) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to cache symbol table leaf node");
/*
- * The left and right symbols in an empty tree are both the
- * empty string stored at offset zero by the H5G functions. This
- * allows the comparison functions to work correctly without knowing
- * that there are no symbols.
+ * Initialize variables.
*/
- if (lt_key)
- lt_key->offset = 0;
- if (rt_key)
- rt_key->offset = 0;
+ size = H5G_node_size(f);
+ if ((buf=H5FL_BLK_MALLOC(symbol_node,size))==NULL)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for symbol table node");
+ p=buf;
+ if (NULL==(sym = H5FL_CALLOC(H5G_node_t)) ||
+ NULL==(sym->entry=H5FL_ARR_CALLOC(H5G_entry_t,(2*H5F_SYM_LEAF_K(f)))))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+ if (H5F_block_read(f, H5FD_MEM_BTREE, addr, size, dxpl_id, buf) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_READERROR, NULL, "unable to read symbol table node");
+ /* magic */
+ if (HDmemcmp(p, H5G_NODE_MAGIC, H5G_NODE_SIZEOF_MAGIC))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "bad symbol table node signature");
+ p += 4;
+
+ /* version */
+ if (H5G_NODE_VERS != *p++)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "bad symbol table node version");
+ /* reserved */
+ p++;
+
+ /* number of symbols */
+ UINT16DECODE(p, sym->nsyms);
+
+ /* entries */
+ if (H5G_ent_decode_vec(f, &p, sym->entry, sym->nsyms) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "unable to decode symbol table entries");
+
+ /* Set return value */
+ ret_value = sym;
done:
- if(ret_value<0) {
- if(sym!=NULL) {
- if(sym->entry!=NULL)
- H5FL_ARR_FREE(H5G_entry_t,sym->entry);
- H5FL_FREE(H5G_node_t,sym);
- } /* end if */
- } /* end if */
+ if (buf)
+ H5FL_BLK_FREE(symbol_node,buf);
+ if (!ret_value) {
+ if (sym)
+ if(H5G_node_dest(f, sym)<0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTFREE, NULL, "unable to destroy symbol table node");
+ }
FUNC_LEAVE_NOAPI(ret_value);
}
@@ -352,7 +368,7 @@ H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5G_node_
for (i=0; i<sym->nsyms; i++) {
if (sym->entry[i].dirty) {
/* Set the node's dirty flag */
- sym->dirty = TRUE;
+ sym->cache_info.dirty = TRUE;
/* Reset the entry's dirty flag */
sym->entry[i].dirty=FALSE;
@@ -362,7 +378,7 @@ H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5G_node_
/*
* Write the symbol node to disk.
*/
- if (sym->dirty) {
+ if (sym->cache_info.dirty) {
size = H5G_node_size(f);
/* Allocate temporary buffer */
@@ -393,7 +409,7 @@ H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5G_node_
H5FL_BLK_FREE(symbol_node,buf);
/* Reset the node's dirty flag */
- sym->dirty = FALSE;
+ sym->cache_info.dirty = FALSE;
}
/*
@@ -401,8 +417,8 @@ H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5G_node_
* preempted from the cache.
*/
if (destroy) {
- sym->entry = H5FL_ARR_FREE(H5G_entry_t,sym->entry);
- H5FL_FREE(H5G_node_t,sym);
+ if(H5G_node_dest(f, sym)<0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTFREE, FAIL, "unable to destroy symbol table node");
}
done:
@@ -411,90 +427,110 @@ done:
/*-------------------------------------------------------------------------
- * Function: H5G_node_load
+ * Function: H5G_node_dest
*
- * Purpose: Loads a symbol table node from the file.
+ * Purpose: Destroy a symbol table node in memory.
*
- * Return: Success: Ptr to the new table.
+ * Return: Non-negative on success/Negative on failure
*
- * Failure: NULL
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Jan 15 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_dest(H5F_t UNUSED *f, H5G_node_t *sym)
+{
+ FUNC_ENTER_NOINIT(H5G_node_dest);
+
+ /*
+ * Check arguments.
+ */
+ assert(sym);
+
+ /* Verify that node is clean */
+ assert (sym->cache_info.dirty==0);
+
+ if(sym->entry)
+ sym->entry = H5FL_ARR_FREE(H5G_entry_t,sym->entry);
+ H5FL_FREE(H5G_node_t,sym);
+
+ FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5G_node_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_node_create
+ *
+ * Purpose: Creates a new empty symbol table node. This function is
+ * called by the B-tree insert function for an empty tree. It
+ * is also called internally to split a symbol node with LT_KEY
+ * and RT_KEY null pointers.
+ *
+ * Return: Success: Non-negative. The address of symbol table
+ * node is returned through the ADDR_P argument.
+ *
+ * Failure: Negative
*
* Programmer: Robb Matzke
* matzke@llnl.gov
* Jun 23 1997
*
* Modifications:
- * Robb Matzke, 1999-07-28
- * The ADDR argument is passed by value.
*
- * Quincey Koziol, 2002-7-180
- * Added dxpl parameter to allow more control over I/O from metadata
- * cache.
*-------------------------------------------------------------------------
*/
-static H5G_node_t *
-H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED _udata1,
- void * UNUSED _udata2)
+static herr_t
+H5G_node_create(H5F_t *f, hid_t dxpl_id, H5B_ins_t UNUSED op, void *_lt_key,
+ void UNUSED *_udata, void *_rt_key, haddr_t *addr_p/*out*/)
{
+ H5G_node_key_t *lt_key = (H5G_node_key_t *) _lt_key;
+ H5G_node_key_t *rt_key = (H5G_node_key_t *) _rt_key;
H5G_node_t *sym = NULL;
- size_t size = 0;
- uint8_t *buf = NULL;
- const uint8_t *p = NULL;
- H5G_node_t *ret_value; /*for error handling */
+ hsize_t size = 0;
+ herr_t ret_value=SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(H5G_node_load, NULL);
+ FUNC_ENTER_NOAPI(H5G_node_create, FAIL);
/*
* Check arguments.
*/
assert(f);
- assert(H5F_addr_defined(addr));
- assert(!_udata1);
- assert(NULL == _udata2);
+ assert(H5B_INS_FIRST == op);
+ if (NULL==(sym = H5FL_CALLOC(H5G_node_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+ size = H5G_node_size(f);
+ if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, size)))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to allocate file space");
+ sym->cache_info.dirty = TRUE;
+ sym->entry = H5FL_ARR_CALLOC(H5G_entry_t,(2*H5F_SYM_LEAF_K(f)));
+ if (NULL==sym->entry)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+ if (H5AC_set(f, dxpl_id, H5AC_SNODE, *addr_p, sym) < 0)
+ HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to cache symbol table leaf node");
/*
- * Initialize variables.
+ * The left and right symbols in an empty tree are both the
+ * empty string stored at offset zero by the H5G functions. This
+ * allows the comparison functions to work correctly without knowing
+ * that there are no symbols.
*/
- size = H5G_node_size(f);
- if ((buf=H5FL_BLK_MALLOC(symbol_node,size))==NULL)
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for symbol table node");
- p=buf;
- if (NULL==(sym = H5FL_CALLOC(H5G_node_t)) ||
- NULL==(sym->entry=H5FL_ARR_CALLOC(H5G_entry_t,(2*H5F_SYM_LEAF_K(f)))))
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
- if (H5F_block_read(f, H5FD_MEM_BTREE, addr, size, dxpl_id, buf) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_READERROR, NULL, "unable to read symbol table node");
- /* magic */
- if (HDmemcmp(p, H5G_NODE_MAGIC, H5G_NODE_SIZEOF_MAGIC))
- HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "bad symbol table node signature");
- p += 4;
-
- /* version */
- if (H5G_NODE_VERS != *p++)
- HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "bad symbol table node version");
- /* reserved */
- p++;
-
- /* number of symbols */
- UINT16DECODE(p, sym->nsyms);
-
- /* entries */
- if (H5G_ent_decode_vec(f, &p, sym->entry, sym->nsyms) < 0)
- HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "unable to decode symbol table entries");
-
- /* Set return value */
- ret_value = sym;
+ if (lt_key)
+ lt_key->offset = 0;
+ if (rt_key)
+ rt_key->offset = 0;
done:
- if (buf)
- H5FL_BLK_FREE(symbol_node,buf);
- if (!ret_value) {
- if (sym) {
- if(sym->entry)
+ if(ret_value<0) {
+ if(sym!=NULL) {
+ if(sym->entry!=NULL)
H5FL_ARR_FREE(H5G_entry_t,sym->entry);
H5FL_FREE(H5G_node_t,sym);
- }
- }
+ } /* end if */
+ } /* end if */
FUNC_LEAVE_NOAPI(ret_value);
}
@@ -524,7 +560,7 @@ done:
*-------------------------------------------------------------------------
*/
static int
-H5G_node_cmp2(H5F_t *f, void *_lt_key, void *_udata, void *_rt_key)
+H5G_node_cmp2(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata, void *_rt_key)
{
H5G_bt_ud1_t *udata = (H5G_bt_ud1_t *) _udata;
H5G_node_key_t *lt_key = (H5G_node_key_t *) _lt_key;
@@ -540,7 +576,7 @@ H5G_node_cmp2(H5F_t *f, void *_lt_key, void *_udata, void *_rt_key)
assert(rt_key);
/* Get base address of heap */
- if (NULL == (base = H5HL_peek(f, udata->heap_addr, 0)))
+ if (NULL == (base = H5HL_peek(f, dxpl_id, udata->heap_addr, 0)))
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read symbol name");
/* Get pointers to string names */
@@ -583,7 +619,7 @@ done:
*-------------------------------------------------------------------------
*/
static int
-H5G_node_cmp3(H5F_t *f, void *_lt_key, void *_udata, void *_rt_key)
+H5G_node_cmp3(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata, void *_rt_key)
{
H5G_bt_ud1_t *udata = (H5G_bt_ud1_t *) _udata;
H5G_node_key_t *lt_key = (H5G_node_key_t *) _lt_key;
@@ -595,7 +631,7 @@ H5G_node_cmp3(H5F_t *f, void *_lt_key, void *_udata, void *_rt_key)
FUNC_ENTER_NOAPI(H5G_node_cmp3, FAIL);
/* Get base address of heap */
- if (NULL == (base = H5HL_peek(f, udata->heap_addr, 0)))
+ if (NULL == (base = H5HL_peek(f, dxpl_id, udata->heap_addr, 0)))
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read symbol name");
/* left side */
@@ -643,7 +679,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5G_node_found(H5F_t *f, haddr_t addr, const void UNUSED *_lt_key,
+H5G_node_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *_lt_key,
void *_udata, const void UNUSED *_rt_key)
{
H5G_bt_ud1_t *bt_udata = (H5G_bt_ud1_t *) _udata;
@@ -665,11 +701,11 @@ H5G_node_found(H5F_t *f, haddr_t addr, const void UNUSED *_lt_key,
/*
* Load the symbol table node for exclusive access.
*/
- if (NULL == (sn = H5AC_protect(f, H5AC_SNODE, addr, NULL, NULL)))
+ if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, FAIL, "unable to protect symbol table node");
/* Get base address of heap */
- if (NULL == (base = H5HL_peek(f, bt_udata->heap_addr, 0)))
+ if (NULL == (base = H5HL_peek(f, dxpl_id, bt_udata->heap_addr, 0)))
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read symbol name");
/*
@@ -700,7 +736,7 @@ H5G_node_found(H5F_t *f, haddr_t addr, const void UNUSED *_lt_key,
HGOTO_ERROR(H5E_SYM, H5E_UNSUPPORTED, FAIL, "internal erorr (unknown symbol find operation)");
done:
- if (sn && H5AC_unprotect(f, H5AC_SNODE, addr, sn) < 0 && ret_value>=0)
+ if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn) < 0 && ret_value>=0)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to release symbol table node");
FUNC_LEAVE_NOAPI(ret_value);
@@ -745,7 +781,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_ins_t
-H5G_node_insert(H5F_t *f, haddr_t addr, void UNUSED *_lt_key,
+H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void UNUSED *_lt_key,
hbool_t UNUSED *lt_key_changed, void *_md_key,
void *_udata, void *_rt_key, hbool_t UNUSED *rt_key_changed,
haddr_t *new_node_p)
@@ -778,11 +814,11 @@ H5G_node_insert(H5F_t *f, haddr_t addr, void UNUSED *_lt_key,
/*
* Load the symbol node.
*/
- if (NULL == (sn = H5AC_protect(f, H5AC_SNODE, addr, NULL, NULL)))
+ if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_INS_ERROR, "unable to protect symbol table node");
/* Get base address of heap */
- if (NULL == (base = H5HL_peek(f, bt_udata->heap_addr, 0)))
+ if (NULL == (base = H5HL_peek(f, dxpl_id, bt_udata->heap_addr, 0)))
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, H5B_INS_ERROR, "unable to read symbol name");
/*
@@ -805,7 +841,7 @@ H5G_node_insert(H5F_t *f, haddr_t addr, void UNUSED *_lt_key,
/*
* Add the new name to the heap.
*/
- offset = H5HL_insert(f, bt_udata->heap_addr, HDstrlen(bt_udata->name)+1,
+ offset = H5HL_insert(f, dxpl_id, bt_udata->heap_addr, HDstrlen(bt_udata->name)+1,
bt_udata->name);
bt_udata->ent.name_off = offset;
if (0==offset || (size_t)(-1)==offset)
@@ -819,21 +855,21 @@ H5G_node_insert(H5F_t *f, haddr_t addr, void UNUSED *_lt_key,
ret_value = H5B_INS_RIGHT;
/* The right node */
- if (H5G_node_create(f, H5B_INS_FIRST, NULL, NULL, NULL,
+ if (H5G_node_create(f, dxpl_id, H5B_INS_FIRST, NULL, NULL, NULL,
new_node_p/*out*/)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5B_INS_ERROR, "unable to split symbol table node");
- if (NULL==(snrt=H5AC_find_f(f, H5AC_SNODE, *new_node_p, NULL, NULL)))
+ if (NULL==(snrt=H5AC_find(f, dxpl_id, H5AC_SNODE, *new_node_p, NULL, NULL)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_INS_ERROR, "unable to split symbol table node");
HDmemcpy(snrt->entry, sn->entry + H5F_SYM_LEAF_K(f),
H5F_SYM_LEAF_K(f) * sizeof(H5G_entry_t));
snrt->nsyms = H5F_SYM_LEAF_K(f);
- snrt->dirty = TRUE;
+ snrt->cache_info.dirty = TRUE;
/* The left node */
HDmemset(sn->entry + H5F_SYM_LEAF_K(f), 0,
H5F_SYM_LEAF_K(f) * sizeof(H5G_entry_t));
sn->nsyms = H5F_SYM_LEAF_K(f);
- sn->dirty = TRUE;
+ sn->cache_info.dirty = TRUE;
/* The middle key */
md_key->offset = sn->entry[sn->nsyms - 1].name_off;
@@ -855,7 +891,7 @@ H5G_node_insert(H5F_t *f, haddr_t addr, void UNUSED *_lt_key,
} else {
/* Where to insert the new entry? */
ret_value = H5B_INS_NOOP;
- sn->dirty = TRUE;
+ sn->cache_info.dirty = TRUE;
insert_into = sn;
if (idx == sn->nsyms) {
rt_key->offset = offset;
@@ -872,7 +908,7 @@ H5G_node_insert(H5F_t *f, haddr_t addr, void UNUSED *_lt_key,
insert_into->nsyms += 1;
done:
- if (sn && H5AC_unprotect(f, H5AC_SNODE, addr, sn) < 0 && ret_value!=H5B_INS_ERROR)
+ if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn) < 0 && ret_value!=H5B_INS_ERROR)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to release symbol table node");
FUNC_LEAVE_NOAPI(ret_value);
@@ -907,7 +943,7 @@ done:
*-------------------------------------------------------------------------
*/
static H5B_ins_t
-H5G_node_remove(H5F_t *f, haddr_t addr, void *_lt_key/*in,out*/,
+H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
hbool_t UNUSED *lt_key_changed/*out*/,
void *_udata/*in,out*/, void *_rt_key/*in,out*/,
hbool_t *rt_key_changed/*out*/)
@@ -931,11 +967,11 @@ H5G_node_remove(H5F_t *f, haddr_t addr, void *_lt_key/*in,out*/,
assert(bt_udata);
/* Load the symbol table */
- if (NULL==(sn=H5AC_protect(f, H5AC_SNODE, addr, NULL, NULL)))
+ if (NULL==(sn=H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_INS_ERROR, "unable to protect symbol table node");
/* Get base address of heap */
- if (NULL == (base = H5HL_peek(f, bt_udata->heap_addr, 0)))
+ if (NULL == (base = H5HL_peek(f, dxpl_id, bt_udata->heap_addr, 0)))
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, H5B_INS_ERROR, "unable to read symbol name");
/* Find the name with a binary search */
@@ -955,19 +991,19 @@ H5G_node_remove(H5F_t *f, haddr_t addr, void *_lt_key/*in,out*/,
if (H5G_CACHED_SLINK==sn->entry[idx].type) {
/* Remove the symbolic link value */
- if ((s=H5HL_peek(f, bt_udata->heap_addr, sn->entry[idx].cache.slink.lval_offset)))
- H5HL_remove(f, bt_udata->heap_addr, sn->entry[idx].cache.slink.lval_offset, HDstrlen(s)+1);
+ if ((s=H5HL_peek(f, dxpl_id, bt_udata->heap_addr, sn->entry[idx].cache.slink.lval_offset)))
+ H5HL_remove(f, dxpl_id, bt_udata->heap_addr, sn->entry[idx].cache.slink.lval_offset, HDstrlen(s)+1);
H5E_clear(); /*no big deal*/
} else {
/* Decrement the reference count */
assert(H5F_addr_defined(sn->entry[idx].header));
- if (H5O_link(sn->entry+idx, -1)<0)
+ if (H5O_link(sn->entry+idx, -1, dxpl_id)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5B_INS_ERROR, "unable to decrement object link count");
}
/* Remove the name from the local heap */
- if ((s=H5HL_peek(f, bt_udata->heap_addr, sn->entry[idx].name_off)))
- H5HL_remove(f, bt_udata->heap_addr, sn->entry[idx].name_off, HDstrlen(s)+1);
+ if ((s=H5HL_peek(f, dxpl_id, bt_udata->heap_addr, sn->entry[idx].name_off)))
+ H5HL_remove(f, dxpl_id, bt_udata->heap_addr, sn->entry[idx].name_off, HDstrlen(s)+1);
H5E_clear(); /*no big deal*/
/* Remove the entry from the symbol table node */
@@ -982,10 +1018,10 @@ H5G_node_remove(H5F_t *f, haddr_t addr, void *_lt_key/*in,out*/,
*rt_key = *lt_key;
*rt_key_changed = TRUE;
sn->nsyms = 0;
- sn->dirty = TRUE;
- if (H5AC_unprotect(f, H5AC_SNODE, addr, sn)<0 ||
- H5AC_flush(f, H5AC_SNODE, addr, TRUE)<0 ||
- H5MF_xfree(f, H5FD_MEM_BTREE, addr, (hsize_t)H5G_node_size(f))<0) {
+ sn->cache_info.dirty = TRUE;
+ if (H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn)<0 ||
+ H5AC_flush(f, dxpl_id, H5AC_SNODE, addr, TRUE)<0 ||
+ H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)H5G_node_size(f))<0) {
sn = NULL;
HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to free symbol table node");
}
@@ -999,7 +1035,7 @@ H5G_node_remove(H5F_t *f, haddr_t addr, void *_lt_key/*in,out*/,
* change.
*/
sn->nsyms -= 1;
- sn->dirty = TRUE;
+ sn->cache_info.dirty = TRUE;
HDmemmove(sn->entry+idx, sn->entry+idx+1,
(sn->nsyms-idx)*sizeof(H5G_entry_t));
ret_value = H5B_INS_NOOP;
@@ -1011,7 +1047,7 @@ H5G_node_remove(H5F_t *f, haddr_t addr, void *_lt_key/*in,out*/,
* should be changed to reflect the new right-most entry.
*/
sn->nsyms -= 1;
- sn->dirty = TRUE;
+ sn->cache_info.dirty = TRUE;
rt_key->offset = sn->entry[sn->nsyms-1].name_off;
*rt_key_changed = TRUE;
ret_value = H5B_INS_NOOP;
@@ -1022,14 +1058,14 @@ H5G_node_remove(H5F_t *f, haddr_t addr, void *_lt_key/*in,out*/,
* node.
*/
sn->nsyms -= 1;
- sn->dirty = TRUE;
+ sn->cache_info.dirty = TRUE;
HDmemmove(sn->entry+idx, sn->entry+idx+1,
(sn->nsyms-idx)*sizeof(H5G_entry_t));
ret_value = H5B_INS_NOOP;
}
done:
- if (sn && H5AC_unprotect(f, H5AC_SNODE, addr, sn)<0 && ret_value!=H5B_INS_ERROR)
+ if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn)<0 && ret_value!=H5B_INS_ERROR)
HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to release symbol table node");
FUNC_LEAVE_NOAPI(ret_value);
@@ -1056,7 +1092,7 @@ done:
*-------------------------------------------------------------------------
*/
H5B_iterate_t
-H5G_node_iterate (H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
+H5G_node_iterate (H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
void UNUSED *_rt_key, void *_udata)
{
H5G_bt_ud2_t *bt_udata = (H5G_bt_ud2_t *)_udata;
@@ -1080,7 +1116,7 @@ H5G_node_iterate (H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
* Save information about the symbol table node since we can't lock it
* because we're about to call an application function.
*/
- if (NULL == (sn = H5AC_find_f(f, H5AC_SNODE, addr, NULL, NULL)))
+ if (NULL == (sn = H5AC_find(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_ITER_ERROR, "unable to load symbol table node");
nsyms = sn->nsyms;
if (NULL==(name_off = H5MM_malloc (nsyms*sizeof(name_off[0]))))
@@ -1096,7 +1132,7 @@ H5G_node_iterate (H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
if (bt_udata->skip>0) {
--bt_udata->skip;
} else {
- name = H5HL_peek (f, bt_udata->group->ent.cache.stab.heap_addr, name_off[i]);
+ name = H5HL_peek (f, dxpl_id, bt_udata->group->ent.cache.stab.heap_addr, name_off[i]);
assert (name);
n = HDstrlen (name);
if (n+1>sizeof(buf)) {
@@ -1106,7 +1142,7 @@ H5G_node_iterate (H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
s = buf;
}
HDstrcpy (s, name);
- ret_value = (H5B_iterate_t)(bt_udata->op)(bt_udata->group_id, s,
+ ret_value = (bt_udata->op)(bt_udata->group_id, s,
bt_udata->op_data);
if (s!=buf)
H5MM_xfree (s);
@@ -1141,7 +1177,7 @@ done:
*-------------------------------------------------------------------------
*/
H5B_iterate_t
-H5G_node_sumup(H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
+H5G_node_sumup(H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
void UNUSED *_rt_key, void *_udata)
{
hsize_t *num_objs = (hsize_t *)_udata;
@@ -1158,7 +1194,7 @@ H5G_node_sumup(H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
assert(num_objs);
/* Find the object node and add the number of symbol entries. */
- if (NULL == (sn = H5AC_find_f(f, H5AC_SNODE, addr, NULL, NULL)))
+ if (NULL == (sn = H5AC_find(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_ITER_ERROR, "unable to load symbol table node");
*num_objs += sn->nsyms;
@@ -1184,7 +1220,7 @@ done:
*-------------------------------------------------------------------------
*/
H5B_iterate_t
-H5G_node_name(H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
+H5G_node_name(H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
void UNUSED *_rt_key, void *_udata)
{
H5G_bt_ud3_t *bt_udata = (H5G_bt_ud3_t *)_udata;
@@ -1204,14 +1240,14 @@ H5G_node_name(H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
assert(bt_udata);
- if (NULL == (sn = H5AC_find_f(f, H5AC_SNODE, addr, NULL, NULL)))
+ if (NULL == (sn = H5AC_find(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_ITER_ERROR, "unable to load symbol table node");
/* Find the node, locate the object symbol table entry and retrieve the name */
if(bt_udata->idx >= bt_udata->num_objs && bt_udata->idx < (bt_udata->num_objs+sn->nsyms)) {
loc_idx = bt_udata->idx - bt_udata->num_objs;
name_off = sn->entry[loc_idx].name_off;
- name = H5HL_peek (f, bt_udata->group->ent.cache.stab.heap_addr, name_off);
+ name = H5HL_peek (f, dxpl_id, bt_udata->group->ent.cache.stab.heap_addr, name_off);
assert (name);
bt_udata->name = H5MM_strdup (name);
HGOTO_DONE(H5B_ITER_STOP);
@@ -1240,7 +1276,7 @@ done:
*-------------------------------------------------------------------------
*/
H5B_iterate_t
-H5G_node_type(H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
+H5G_node_type(H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
void UNUSED *_rt_key, void *_udata)
{
H5G_bt_ud3_t *bt_udata = (H5G_bt_ud3_t*)_udata;
@@ -1256,12 +1292,12 @@ H5G_node_type(H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
assert(bt_udata);
/* Find the node, locate the object symbol table entry and retrieve the type */
- if (NULL == (sn = H5AC_find_f(f, H5AC_SNODE, addr, NULL, NULL)))
+ if (NULL == (sn = H5AC_find(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL)))
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_ITER_ERROR, "unable to load symbol table node");
if(bt_udata->idx >= bt_udata->num_objs && bt_udata->idx < (bt_udata->num_objs+sn->nsyms)) {
loc_idx = bt_udata->idx - bt_udata->num_objs;
- bt_udata->type = H5G_get_type(&(sn->entry[loc_idx]));
+ bt_udata->type = H5G_get_type(&(sn->entry[loc_idx]), dxpl_id);
HGOTO_DONE(H5B_ITER_STOP);
}
@@ -1290,7 +1326,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5G_node_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent,
+H5G_node_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
int fwidth, haddr_t heap)
{
int i;
@@ -1313,16 +1349,16 @@ H5G_node_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent,
* If we couldn't load the symbol table node, then try loading the
* B-tree node.
*/
- if (NULL == (sn = H5AC_protect(f, H5AC_SNODE, addr, NULL, NULL))) {
+ if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL))) {
H5E_clear(); /*discard that error */
- if ( H5B_debug(f, addr, stream, indent, fwidth, H5B_SNODE, NULL) < 0)
+ if ( H5B_debug(f, dxpl_id, addr, stream, indent, fwidth, H5B_SNODE, NULL) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, FAIL, "unable to debug B-tree node");
HGOTO_DONE(SUCCEED);
}
fprintf(stream, "%*sSymbol Table Node...\n", indent, "");
fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
"Dirty:",
- sn->dirty ? "Yes" : "No");
+ sn->cache_info.dirty ? "Yes" : "No");
fprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
"Size of Node (in bytes):", (unsigned)H5G_node_size(f));
fprintf(stream, "%*s%-*s %d of %d\n", indent, "", fwidth,
@@ -1334,15 +1370,15 @@ H5G_node_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent,
for (i = 0; i < sn->nsyms; i++) {
fprintf(stream, "%*sSymbol %d:\n", indent - 3, "", i);
if (H5F_addr_defined(heap) &&
- (s = H5HL_peek(f, heap, sn->entry[i].name_off))) {
+ (s = H5HL_peek(f, dxpl_id, heap, sn->entry[i].name_off))) {
fprintf(stream, "%*s%-*s `%s'\n", indent, "", fwidth,
"Name:",
s);
}
- H5G_ent_debug(f, sn->entry + i, stream, indent, fwidth, heap);
+ H5G_ent_debug(f, dxpl_id, sn->entry + i, stream, indent, fwidth, heap);
}
- H5AC_unprotect(f, H5AC_SNODE, addr, sn);
+ H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn);
done:
FUNC_LEAVE_NOAPI(ret_value);
diff --git a/src/H5Gpkg.h b/src/H5Gpkg.h
index b058ea3..5070fcc 100644
--- a/src/H5Gpkg.h
+++ b/src/H5Gpkg.h
@@ -34,7 +34,6 @@
typedef struct H5G_node_t {
H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
/* first field in structure */
- hbool_t dirty; /*has cache been modified? */
int nsyms; /*number of symbols */
H5G_entry_t *entry; /*array of symbol table entries */
} H5G_node_t;
@@ -134,13 +133,13 @@ H5_DLLVAR const H5AC_class_t H5AC_SNODE[1];
* functions that understand names are exported to the rest of
* the library and appear in H5Gprivate.h.
*/
-H5_DLL herr_t H5G_stab_create(H5F_t *f, size_t size_hint,
+H5_DLL herr_t H5G_stab_create(H5F_t *f, hid_t dxpl_id, size_t size_hint,
H5G_entry_t *ent/*out*/);
H5_DLL herr_t H5G_stab_find(H5G_entry_t *grp_ent, const char *name,
- H5G_entry_t *obj_ent/*out*/);
+ H5G_entry_t *obj_ent/*out*/, hid_t dxpl_id);
H5_DLL herr_t H5G_stab_insert(H5G_entry_t *grp_ent, const char *name,
- H5G_entry_t *obj_ent);
-H5_DLL herr_t H5G_stab_remove(H5G_entry_t *grp_ent, const char *name);
+ H5G_entry_t *obj_ent, hid_t dxpl_id);
+H5_DLL herr_t H5G_stab_remove(H5G_entry_t *grp_ent, const char *name, hid_t dxpl_id);
/*
* Functions that understand symbol table entries.
@@ -151,12 +150,12 @@ H5_DLL herr_t H5G_ent_encode_vec(H5F_t *f, uint8_t **pp,
const H5G_entry_t *ent, int n);
/* Functions that understand symbol table nodes */
-H5_DLL H5B_iterate_t H5G_node_iterate (H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
+H5_DLL H5B_iterate_t H5G_node_iterate (H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
void UNUSED *_rt_key, void *_udata);
-H5_DLL H5B_iterate_t H5G_node_sumup(H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
+H5_DLL H5B_iterate_t H5G_node_sumup(H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
void UNUSED *_rt_key, void *_udata);
-H5_DLL H5B_iterate_t H5G_node_name(H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
+H5_DLL H5B_iterate_t H5G_node_name(H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
void UNUSED *_rt_key, void *_udata);
-H5_DLL H5B_iterate_t H5G_node_type(H5F_t *f, void UNUSED *_lt_key, haddr_t addr,
+H5_DLL H5B_iterate_t H5G_node_type(H5F_t *f, hid_t dxpl_id, void UNUSED *_lt_key, haddr_t addr,
void UNUSED *_rt_key, void *_udata);
#endif
diff --git a/src/H5Gprivate.h b/src/H5Gprivate.h
index be360cb..10127dc 100644
--- a/src/H5Gprivate.h
+++ b/src/H5Gprivate.h
@@ -115,7 +115,7 @@ typedef struct H5G_t H5G_t;
*/
typedef struct H5G_typeinfo_t {
int type; /*one of the public H5G_* types */
- htri_t (*isa)(H5G_entry_t*); /*function to determine type */
+ htri_t (*isa)(H5G_entry_t*, hid_t); /*function to determine type */
char *desc; /*description of object type */
} H5G_typeinfo_t;
@@ -139,59 +139,34 @@ typedef enum {
* Library prototypes... These are the ones that other packages routinely
* call.
*/
-H5_DLL herr_t H5G_register_type(int type, htri_t(*isa)(H5G_entry_t*),
+H5_DLL herr_t H5G_register_type(int type, htri_t(*isa)(H5G_entry_t*, hid_t),
const char *desc);
H5_DLL H5G_entry_t *H5G_loc(hid_t loc_id);
-H5_DLL herr_t H5G_mkroot(H5F_t *f, H5G_entry_t *root_entry);
+H5_DLL herr_t H5G_mkroot(H5F_t *f, hid_t dxpl_id, H5G_entry_t *root_entry);
H5_DLL H5G_entry_t *H5G_entof(H5G_t *grp);
H5_DLL H5F_t *H5G_fileof(H5G_t *grp);
-H5_DLL H5G_t *H5G_create(H5G_entry_t *loc, const char *name,
- size_t size_hint);
-H5_DLL H5G_t *H5G_open(H5G_entry_t *loc, const char *name);
-H5_DLL H5G_t *H5G_open_oid(H5G_entry_t *ent);
-H5_DLL H5G_t *H5G_reopen(H5G_t *grp);
+H5_DLL H5G_t *H5G_open(H5G_entry_t *loc, const char *name, hid_t dxpl_id);
+H5_DLL H5G_t *H5G_open_oid(H5G_entry_t *ent, hid_t dxpl_id);
H5_DLL herr_t H5G_close(H5G_t *grp);
H5_DLL H5G_t *H5G_rootof(H5F_t *f);
-H5_DLL herr_t H5G_get_num_objs(H5G_t *grp, hsize_t *num_objs);
-H5_DLL ssize_t H5G_get_objname_by_idx(H5G_t *grp, hsize_t idx, char* name, size_t size);
-H5_DLL int H5G_get_objtype_by_idx(H5G_t *grp, hsize_t idx);
-H5_DLL htri_t H5G_isa(H5G_entry_t *ent);
-H5_DLL herr_t H5G_link(H5G_entry_t *cur_loc, const char *cur_name,
- H5G_entry_t *new_loc, const char *new_name,
- H5G_link_t type, unsigned namei_flags);
-H5_DLL int H5G_get_type(H5G_entry_t *ent);
+H5_DLL int H5G_get_type(H5G_entry_t *ent, hid_t dxpl_id);
H5_DLL herr_t H5G_get_objinfo(H5G_entry_t *loc, const char *name,
hbool_t follow_link,
- H5G_stat_t *statbuf/*out*/);
-H5_DLL herr_t H5G_linkval(H5G_entry_t *loc, const char *name, size_t size,
- char *buf/*out*/);
-H5_DLL herr_t H5G_set_comment(H5G_entry_t *loc, const char *name,
- const char *buf);
-H5_DLL int H5G_get_comment(H5G_entry_t *loc, const char *name,
- size_t bufsize, char *buf);
+ H5G_stat_t *statbuf/*out*/, hid_t dxpl_id);
H5_DLL herr_t H5G_insert(H5G_entry_t *loc, const char *name,
- H5G_entry_t *ent);
-H5_DLL herr_t H5G_move(H5G_entry_t *src_loc, const char *src_name,
- H5G_entry_t *dst_loc, const char *dst_name);
-H5_DLL herr_t H5G_unlink(H5G_entry_t *loc, const char *name);
+ H5G_entry_t *ent, hid_t dxpl_id);
H5_DLL herr_t H5G_find(H5G_entry_t *loc, const char *name,
- H5G_entry_t *grp_ent/*out*/, H5G_entry_t *ent/*out*/);
-H5_DLL H5F_t *H5G_insertion_file(H5G_entry_t *loc, const char *name);
-H5_DLL herr_t H5G_ent_encode(H5F_t *f, uint8_t **pp, const H5G_entry_t *ent);
-H5_DLL herr_t H5G_ent_decode(H5F_t *f, const uint8_t **pp,
- H5G_entry_t *ent/*out*/);
+ H5G_entry_t *grp_ent/*out*/, H5G_entry_t *ent/*out*/, hid_t dxpl_id);
+H5_DLL H5F_t *H5G_insertion_file(H5G_entry_t *loc, const char *name, hid_t dxpl_id);
H5_DLL herr_t H5G_replace_name(int type, H5G_entry_t *loc,
H5RS_str_t *src_name, H5G_entry_t *src_loc,
H5RS_str_t *dst_name, H5G_entry_t *dst_loc, H5G_names_op_t op);
-H5_DLL herr_t H5G_ent_copy(H5G_entry_t *dst, const H5G_entry_t *src,
- H5G_ent_copy_depth_t depth);
H5_DLL herr_t H5G_free_grp_name(H5G_t *grp);
-H5_DLL herr_t H5G_free_ent_name(H5G_entry_t *ent);
/*
* These functions operate on symbol table nodes.
*/
-H5_DLL herr_t H5G_node_debug(H5F_t *f, haddr_t addr, FILE *stream,
+H5_DLL herr_t H5G_node_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream,
int indent, int fwidth, haddr_t heap);
/*
@@ -199,8 +174,14 @@ H5_DLL herr_t H5G_node_debug(H5F_t *f, haddr_t addr, FILE *stream,
* in the H5O package where header messages are cached in symbol table
* entries. The subclasses of H5O probably don't need them though.
*/
+H5_DLL herr_t H5G_ent_encode(H5F_t *f, uint8_t **pp, const H5G_entry_t *ent);
+H5_DLL herr_t H5G_ent_decode(H5F_t *f, const uint8_t **pp,
+ H5G_entry_t *ent/*out*/);
H5_DLL H5G_cache_t *H5G_ent_cache(H5G_entry_t *ent, H5G_type_t *cache_type);
H5_DLL herr_t H5G_ent_modified(H5G_entry_t *ent, H5G_type_t cache_type);
-H5_DLL herr_t H5G_ent_debug(H5F_t *f, const H5G_entry_t *ent, FILE * stream,
+H5_DLL herr_t H5G_ent_copy(H5G_entry_t *dst, const H5G_entry_t *src,
+ H5G_ent_copy_depth_t depth);
+H5_DLL herr_t H5G_free_ent_name(H5G_entry_t *ent);
+H5_DLL herr_t H5G_ent_debug(H5F_t *f, hid_t dxpl_id, const H5G_entry_t *ent, FILE * stream,
int indent, int fwidth, haddr_t heap);
#endif
diff --git a/src/H5Gstab.c b/src/H5Gstab.c
index 9aa46dc..4e35771 100644
--- a/src/H5Gstab.c
+++ b/src/H5Gstab.c
@@ -55,7 +55,7 @@ static herr_t H5G_insert_name(H5G_entry_t *loc, H5G_entry_t *obj,
*-------------------------------------------------------------------------
*/
herr_t
-H5G_stab_create(H5F_t *f, size_t init, H5G_entry_t *self/*out*/)
+H5G_stab_create(H5F_t *f, hid_t dxpl_id, size_t init, H5G_entry_t *self/*out*/)
{
size_t name; /*offset of "" name */
H5O_stab_t stab; /*symbol table message */
@@ -71,9 +71,9 @@ H5G_stab_create(H5F_t *f, size_t init, H5G_entry_t *self/*out*/)
init = MAX(init, H5HL_SIZEOF_FREE(f) + 2);
/* Create symbol table private heap */
- if (H5HL_create(f, init, &(stab.heap_addr)/*out*/)<0)
+ if (H5HL_create(f, dxpl_id, init, &(stab.heap_addr)/*out*/)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create heap");
- name = H5HL_insert(f, stab.heap_addr, 1, "");
+ name = H5HL_insert(f, dxpl_id, stab.heap_addr, 1, "");
if ((size_t)(-1)==name)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't initialize heap");
@@ -84,7 +84,7 @@ H5G_stab_create(H5F_t *f, size_t init, H5G_entry_t *self/*out*/)
assert(0 == name);
/* Create the B-tree */
- if (H5B_create(f, H5B_SNODE, NULL, &(stab.btree_addr)/*out*/) < 0)
+ if (H5B_create(f, dxpl_id, H5B_SNODE, NULL, &(stab.btree_addr)/*out*/) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create B-tree");
/*
@@ -92,14 +92,14 @@ H5G_stab_create(H5F_t *f, size_t init, H5G_entry_t *self/*out*/)
* since nothing refers to it yet. The link count will be
* incremented if the object is added to the group directed graph.
*/
- if (H5O_create(f, 4 + 2 * H5F_SIZEOF_ADDR(f), self/*out*/) < 0)
+ if (H5O_create(f, dxpl_id, 4 + 2 * H5F_SIZEOF_ADDR(f), self/*out*/) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create header");
/*
* Insert the symbol table message into the object header and the symbol
* table entry.
*/
- if (H5O_modify(self, H5O_STAB, H5O_NEW_MESG, H5O_FLAG_CONSTANT, 1, &stab)<0) {
+ if (H5O_modify(self, H5O_STAB, H5O_NEW_MESG, H5O_FLAG_CONSTANT, 1, &stab, dxpl_id)<0) {
H5O_close(self);
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create message");
}
@@ -137,7 +137,7 @@ done:
*/
herr_t
H5G_stab_find(H5G_entry_t *grp_ent, const char *name,
- H5G_entry_t *obj_ent/*out*/)
+ H5G_entry_t *obj_ent/*out*/, hid_t dxpl_id)
{
H5G_bt_ud1_t udata; /*data to pass through B-tree */
H5O_stab_t stab; /*symbol table message */
@@ -151,14 +151,14 @@ H5G_stab_find(H5G_entry_t *grp_ent, const char *name,
assert(name && *name);
/* set up the udata */
- if (NULL == H5O_read(grp_ent, H5O_STAB, 0, &stab))
+ if (NULL == H5O_read(grp_ent, H5O_STAB, 0, &stab, dxpl_id))
HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "can't read message");
udata.operation = H5G_OPER_FIND;
udata.name = name;
udata.heap_addr = stab.heap_addr;
/* search the B-tree */
- if (H5B_find(grp_ent->file, H5B_SNODE, stab.btree_addr, &udata) < 0) {
+ if (H5B_find(grp_ent->file, dxpl_id, H5B_SNODE, stab.btree_addr, &udata) < 0) {
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "not found");
} /* end if */
/* change OBJ_ENT only if found */
@@ -202,7 +202,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5G_stab_insert(H5G_entry_t *grp_ent, const char *name, H5G_entry_t *obj_ent)
+H5G_stab_insert(H5G_entry_t *grp_ent, const char *name, H5G_entry_t *obj_ent, hid_t dxpl_id)
{
H5O_stab_t stab; /*symbol table message */
H5G_bt_ud1_t udata; /*data to pass through B-tree */
@@ -223,7 +223,7 @@ H5G_stab_insert(H5G_entry_t *grp_ent, const char *name, H5G_entry_t *obj_ent)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "cannot insert name");
/* initialize data to pass through B-tree */
- if (NULL == H5O_read(grp_ent, H5O_STAB, 0, &stab))
+ if (NULL == H5O_read(grp_ent, H5O_STAB, 0, &stab, dxpl_id))
HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "not a symbol table");
udata.operation = H5G_OPER_INSERT;
udata.name = name;
@@ -231,7 +231,7 @@ H5G_stab_insert(H5G_entry_t *grp_ent, const char *name, H5G_entry_t *obj_ent)
H5G_ent_copy(&(udata.ent),obj_ent,H5G_COPY_NULL); /* NULL copy here, no copies happens in H5G_node_insert() callback() */
/* insert */
- if (H5B_insert(grp_ent->file, H5B_SNODE, stab.btree_addr, split_ratios, &udata) < 0)
+ if (H5B_insert(grp_ent->file, dxpl_id, H5B_SNODE, stab.btree_addr, split_ratios, &udata) < 0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINSERT, FAIL, "unable to insert entry");
/* update the name offset in the entry */
@@ -257,7 +257,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5G_stab_remove(H5G_entry_t *grp_ent, const char *name)
+H5G_stab_remove(H5G_entry_t *grp_ent, const char *name, hid_t dxpl_id)
{
H5O_stab_t stab; /*symbol table message */
H5G_bt_ud1_t udata; /*data to pass through B-tree */
@@ -269,7 +269,7 @@ H5G_stab_remove(H5G_entry_t *grp_ent, const char *name)
assert(name && *name);
/* initialize data to pass through B-tree */
- if (NULL==H5O_read(grp_ent, H5O_STAB, 0, &stab))
+ if (NULL==H5O_read(grp_ent, H5O_STAB, 0, &stab, dxpl_id))
HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "not a symbol table");
udata.operation = H5G_OPER_REMOVE;
udata.name = name;
@@ -277,7 +277,7 @@ H5G_stab_remove(H5G_entry_t *grp_ent, const char *name)
HDmemset(&(udata.ent), 0, sizeof(udata.ent));
/* remove */
- if (H5B_remove(grp_ent->file, H5B_SNODE, stab.btree_addr, &udata)<0)
+ if (H5B_remove(grp_ent->file, dxpl_id, H5B_SNODE, stab.btree_addr, &udata)<0)
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to remove entry");
done:
diff --git a/src/H5HG.c b/src/H5HG.c
index fbe626b..7c29ce6 100644
--- a/src/H5HG.c
+++ b/src/H5HG.c
@@ -60,6 +60,7 @@ static H5HG_heap_t *H5HG_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void
void *udata2);
static herr_t H5HG_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
H5HG_heap_t *heap);
+static herr_t H5HG_dest(H5F_t *f, H5HG_heap_t *heap);
/*
* H5HG inherits cache-like properties from H5AC
@@ -68,6 +69,7 @@ static const H5AC_class_t H5AC_GHEAP[1] = {{
H5AC_GHEAP_ID,
(H5AC_load_func_t)H5HG_load,
(H5AC_flush_func_t)H5HG_flush,
+ (H5AC_dest_func_t)H5HG_dest,
}};
/* Interface initialization */
@@ -106,7 +108,7 @@ H5FL_BLK_DEFINE_STATIC(heap_chunk);
*-------------------------------------------------------------------------
*/
H5HG_heap_t *
-H5HG_create (H5F_t *f, size_t size)
+H5HG_create (H5F_t *f, hid_t dxpl_id, size_t size)
{
H5HG_heap_t *heap = NULL;
H5HG_heap_t *ret_value = NULL;
@@ -123,26 +125,19 @@ H5HG_create (H5F_t *f, size_t size)
size = H5HG_ALIGN(size);
/* Create it */
- if (HADDR_UNDEF==(addr=H5MF_alloc(f, H5FD_MEM_GHEAP, (hsize_t)size))) {
- HGOTO_ERROR (H5E_HEAP, H5E_CANTINIT, NULL,
- "unable to allocate file space for global heap");
- }
- if (NULL==(heap = H5FL_CALLOC (H5HG_heap_t))) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
+ H5_CHECK_OVERFLOW(size,size_t,hsize_t);
+ if (HADDR_UNDEF==(addr=H5MF_alloc(f, H5FD_MEM_GHEAP, dxpl_id, (hsize_t)size)))
+ HGOTO_ERROR (H5E_HEAP, H5E_CANTINIT, NULL, "unable to allocate file space for global heap");
+ if (NULL==(heap = H5FL_CALLOC (H5HG_heap_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
heap->addr = addr;
heap->size = size;
heap->dirty = TRUE;
- if (NULL==(heap->chunk = H5FL_BLK_MALLOC (heap_chunk,size))) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
+ if (NULL==(heap->chunk = H5FL_BLK_MALLOC (heap_chunk,size)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
heap->nalloc = H5HG_NOBJS (f, size);
- if (NULL==(heap->obj = H5FL_ARR_CALLOC (H5HG_obj_t,heap->nalloc))) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
+ if (NULL==(heap->obj = H5FL_ARR_CALLOC (H5HG_obj_t,heap->nalloc)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
/* Initialize the header */
HDmemcpy (heap->chunk, H5HG_MAGIC, H5HG_SIZEOF_MAGIC);
@@ -173,34 +168,28 @@ H5HG_create (H5F_t *f, size_t size)
HDmemset (p, 0, (size_t)((heap->chunk+heap->size) - p));
/* Add the heap to the cache */
- if (H5AC_set (f, H5AC_GHEAP, addr, heap)<0) {
- HGOTO_ERROR (H5E_HEAP, H5E_CANTINIT, NULL,
- "unable to cache global heap collection");
- }
+ if (H5AC_set (f, dxpl_id, H5AC_GHEAP, addr, heap)<0)
+ HGOTO_ERROR (H5E_HEAP, H5E_CANTINIT, NULL, "unable to cache global heap collection");
/* Add this heap to the beginning of the CWFS list */
if (NULL==f->shared->cwfs) {
f->shared->cwfs = H5MM_malloc (H5HG_NCWFS * sizeof(H5HG_heap_t*));
- if (NULL==(f->shared->cwfs)) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
+ if (NULL==(f->shared->cwfs))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
f->shared->cwfs[0] = heap;
f->shared->ncwfs = 1;
} else {
- HDmemmove (f->shared->cwfs+1, f->shared->cwfs,
- MIN (f->shared->ncwfs, H5HG_NCWFS-1)*sizeof(H5HG_heap_t*));
+ HDmemmove (f->shared->cwfs+1, f->shared->cwfs, MIN (f->shared->ncwfs, H5HG_NCWFS-1)*sizeof(H5HG_heap_t*));
f->shared->cwfs[0] = heap;
f->shared->ncwfs = MIN (H5HG_NCWFS, f->shared->ncwfs+1);
}
ret_value = heap;
- done:
+done:
if (!ret_value && heap) {
- H5FL_BLK_FREE(heap_chunk,heap->chunk);
- H5FL_ARR_FREE (H5HG_obj_t,heap->obj);
- H5FL_FREE (H5HG_heap_t,heap);
+ if(H5HG_dest(f,heap)<0)
+ HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, NULL, "unable to destroy global heap collection");
}
FUNC_LEAVE_NOAPI(ret_value);
}
@@ -246,33 +235,22 @@ H5HG_load (H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED udata1,
assert (!udata2);
/* Read the initial 4k page */
- if (NULL==(heap = H5FL_CALLOC (H5HG_heap_t))) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
+ if (NULL==(heap = H5FL_CALLOC (H5HG_heap_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
heap->addr = addr;
- if (NULL==(heap->chunk = H5FL_BLK_MALLOC (heap_chunk,H5HG_MINSIZE))) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
- if (H5F_block_read(f, H5FD_MEM_GHEAP, addr, H5HG_MINSIZE, dxpl_id,
- heap->chunk)<0) {
- HGOTO_ERROR (H5E_HEAP, H5E_READERROR, NULL,
- "unable to read global heap collection");
- }
+ if (NULL==(heap->chunk = H5FL_BLK_MALLOC (heap_chunk,H5HG_MINSIZE)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+ if (H5F_block_read(f, H5FD_MEM_GHEAP, addr, H5HG_MINSIZE, dxpl_id, heap->chunk)<0)
+ HGOTO_ERROR (H5E_HEAP, H5E_READERROR, NULL, "unable to read global heap collection");
/* Magic number */
- if (HDmemcmp (heap->chunk, H5HG_MAGIC, H5HG_SIZEOF_MAGIC)) {
- HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL,
- "bad global heap collection signature");
- }
+ if (HDmemcmp (heap->chunk, H5HG_MAGIC, H5HG_SIZEOF_MAGIC))
+ HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL, "bad global heap collection signature");
p = heap->chunk + H5HG_SIZEOF_MAGIC;
/* Version */
- if (H5HG_VERSION!=*p++) {
- HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL,
- "wrong version number in global heap");
- }
+ if (H5HG_VERSION!=*p++)
+ HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL, "wrong version number in global heap");
/* Reserved */
p += 3;
@@ -287,24 +265,17 @@ H5HG_load (H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED udata1,
*/
if (heap->size > H5HG_MINSIZE) {
haddr_t next_addr = addr + (hsize_t)H5HG_MINSIZE;
- if (NULL==(heap->chunk = H5FL_BLK_REALLOC (heap_chunk, heap->chunk, heap->size))) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
- if (H5F_block_read (f, H5FD_MEM_GHEAP, next_addr, (heap->size-H5HG_MINSIZE),
- dxpl_id, heap->chunk+H5HG_MINSIZE)<0) {
- HGOTO_ERROR (H5E_HEAP, H5E_READERROR, NULL,
- "unable to read global heap collection");
- }
+ if (NULL==(heap->chunk = H5FL_BLK_REALLOC (heap_chunk, heap->chunk, heap->size)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+ if (H5F_block_read (f, H5FD_MEM_GHEAP, next_addr, (heap->size-H5HG_MINSIZE), dxpl_id, heap->chunk+H5HG_MINSIZE)<0)
+ HGOTO_ERROR (H5E_HEAP, H5E_READERROR, NULL, "unable to read global heap collection");
}
/* Decode each object */
p = heap->chunk + H5HG_SIZEOF_HDR (f);
nalloc = H5HG_NOBJS (f, heap->size);
- if (NULL==(heap->obj = H5FL_ARR_CALLOC (H5HG_obj_t,nalloc))) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
+ if (NULL==(heap->obj = H5FL_ARR_CALLOC (H5HG_obj_t,nalloc)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
heap->nalloc = nalloc;
while (p<heap->chunk+heap->size) {
if (p+H5HG_SIZEOF_OBJHDR(f)>heap->chunk+heap->size) {
@@ -352,24 +323,20 @@ H5HG_load (H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED udata1,
if (heap->obj[0].size>0) {
if (!f->shared->cwfs) {
f->shared->cwfs = H5MM_malloc (H5HG_NCWFS*sizeof(H5HG_heap_t*));
- if (NULL==f->shared->cwfs) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,
- "memory allocation failed");
- }
+ if (NULL==f->shared->cwfs)
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
f->shared->ncwfs = 1;
f->shared->cwfs[0] = heap;
} else if (H5HG_NCWFS==f->shared->ncwfs) {
for (i=H5HG_NCWFS-1; i>=0; --i) {
if (f->shared->cwfs[i]->obj[0].size < heap->obj[0].size) {
- HDmemcpy (f->shared->cwfs+1, f->shared->cwfs,
- i * sizeof(H5HG_heap_t*));
+ HDmemcpy (f->shared->cwfs+1, f->shared->cwfs, i * sizeof(H5HG_heap_t*));
f->shared->cwfs[0] = heap;
break;
}
}
} else {
- HDmemcpy (f->shared->cwfs+1, f->shared->cwfs,
- f->shared->ncwfs*sizeof(H5HG_heap_t*));
+ HDmemcpy (f->shared->cwfs+1, f->shared->cwfs, f->shared->ncwfs*sizeof(H5HG_heap_t*));
f->shared->ncwfs += 1;
f->shared->cwfs[0] = heap;
}
@@ -377,11 +344,10 @@ H5HG_load (H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED udata1,
ret_value = heap;
- done:
+done:
if (!ret_value && heap) {
- H5FL_BLK_FREE (heap_chunk,heap->chunk);
- H5FL_ARR_FREE(H5HG_obj_t,heap->obj);
- H5FL_FREE (H5HG_heap_t,heap);
+ if(H5HG_dest(f,heap)<0)
+ HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, NULL, "unable to destroy global heap collection");
}
FUNC_LEAVE_NOAPI(ret_value);
}
@@ -410,7 +376,6 @@ H5HG_load (H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED udata1,
static herr_t
H5HG_flush (H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5HG_heap_t *heap)
{
- int i;
herr_t ret_value=SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5HG_flush, FAIL);
@@ -422,24 +387,14 @@ H5HG_flush (H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5HG_heap_t
assert (heap);
if (heap->dirty) {
- if (H5F_block_write (f, H5FD_MEM_GHEAP, addr, heap->size,
- dxpl_id, heap->chunk)<0)
+ if (H5F_block_write (f, H5FD_MEM_GHEAP, addr, heap->size, dxpl_id, heap->chunk)<0)
HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "unable to write global heap collection to file");
heap->dirty = 0;
}
if (destroy) {
- for (i=0; i<f->shared->ncwfs; i++) {
- if (f->shared->cwfs[i]==heap) {
- f->shared->ncwfs -= 1;
- HDmemmove (f->shared->cwfs+i, f->shared->cwfs+i+1,
- (f->shared->ncwfs-i) * sizeof(H5HG_heap_t*));
- break;
- }
- }
- heap->chunk = H5FL_BLK_FREE(heap_chunk,heap->chunk);
- heap->obj = H5FL_ARR_FREE(H5HG_obj_t,heap->obj);
- H5FL_FREE (H5HG_heap_t,heap);
+ if(H5HG_dest(f,heap)<0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy global heap collection");
}
done:
@@ -448,6 +403,48 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5HG_dest
+ *
+ * Purpose: Destroys a global heap collection in memory
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * Wednesday, January 15, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HG_dest (H5F_t *f, H5HG_heap_t *heap)
+{
+ int i;
+
+ FUNC_ENTER_NOINIT(H5HG_dest);
+
+ /* Check arguments */
+ assert (heap);
+
+ /* Verify that node is clean */
+ assert (heap->cache_info.dirty==0);
+
+ for (i=0; i<f->shared->ncwfs; i++) {
+ if (f->shared->cwfs[i]==heap) {
+ f->shared->ncwfs -= 1;
+ HDmemmove (f->shared->cwfs+i, f->shared->cwfs+i+1, (f->shared->ncwfs-i) * sizeof(H5HG_heap_t*));
+ break;
+ }
+ }
+ heap->chunk = H5FL_BLK_FREE(heap_chunk,heap->chunk);
+ heap->obj = H5FL_ARR_FREE(H5HG_obj_t,heap->obj);
+ H5FL_FREE (H5HG_heap_t,heap);
+
+ FUNC_LEAVE_NOAPI(SUCCEED);
+} /* H5HG_dest() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5HG_alloc
*
* Purpose: Given a heap with enough free space, this function will split
@@ -568,7 +565,7 @@ H5HG_alloc (H5F_t *f, H5HG_heap_t *heap, int cwfsno, size_t size)
*-------------------------------------------------------------------------
*/
herr_t
-H5HG_insert (H5F_t *f, size_t size, void *obj, H5HG_t *hobj/*out*/)
+H5HG_insert (H5F_t *f, hid_t dxpl_id, size_t size, void *obj, H5HG_t *hobj/*out*/)
{
size_t need; /*total space needed for object */
int cwfsno;
@@ -609,7 +606,7 @@ H5HG_insert (H5F_t *f, size_t size, void *obj, H5HG_t *hobj/*out*/)
* new collection large enough for the message plus the collection header.
*/
if (cwfsno>=f->shared->ncwfs) {
- if (NULL==(heap=H5HG_create (f, need+H5HG_SIZEOF_HDR (f))))
+ if (NULL==(heap=H5HG_create (f, dxpl_id, need+H5HG_SIZEOF_HDR (f))))
HGOTO_ERROR (H5E_HEAP, H5E_CANTINIT, FAIL, "unable to allocate a global heap collection");
assert (f->shared->ncwfs>0);
assert (f->shared->cwfs[0]==heap);
@@ -658,7 +655,7 @@ done:
*-------------------------------------------------------------------------
*/
void *
-H5HG_peek (H5F_t *f, H5HG_t *hobj)
+H5HG_peek (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj)
{
H5HG_heap_t *heap = NULL;
void *ret_value;
@@ -671,7 +668,7 @@ H5HG_peek (H5F_t *f, H5HG_t *hobj)
assert (hobj);
/* Load the heap and return a pointer to the object */
- if (NULL==(heap=H5AC_find_f (f, H5AC_GHEAP, hobj->addr, NULL, NULL)))
+ if (NULL==(heap=H5AC_find(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL)))
HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL, "unable to load heap");
assert (hobj->idx>0 && hobj->idx<heap->nalloc);
ret_value = heap->obj[hobj->idx].begin + H5HG_SIZEOF_OBJHDR (f);
@@ -679,7 +676,7 @@ H5HG_peek (H5F_t *f, H5HG_t *hobj)
/*
* Advance the heap in the CWFS list. We might have done this already
- * with the H5AC_find_f(), but it won't hurt to do it twice.
+ * with the H5AC_find(), but it won't hurt to do it twice.
*/
if (heap->obj[0].begin) {
for (i=0; i<f->shared->ncwfs; i++) {
@@ -718,7 +715,7 @@ done:
*-------------------------------------------------------------------------
*/
void *
-H5HG_read (H5F_t *f, H5HG_t *hobj, void *object/*out*/)
+H5HG_read (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, void *object/*out*/)
{
H5HG_heap_t *heap = NULL;
int i;
@@ -733,7 +730,7 @@ H5HG_read (H5F_t *f, H5HG_t *hobj, void *object/*out*/)
assert (hobj);
/* Load the heap */
- if (NULL==(heap=H5AC_find_f (f, H5AC_GHEAP, hobj->addr, NULL, NULL)))
+ if (NULL==(heap=H5AC_find(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL)))
HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL, "unable to load heap");
assert (hobj->idx>0 && hobj->idx<heap->nalloc);
assert (heap->obj[hobj->idx].begin);
@@ -745,7 +742,7 @@ H5HG_read (H5F_t *f, H5HG_t *hobj, void *object/*out*/)
/*
* Advance the heap in the CWFS list. We might have done this already
- * with the H5AC_find_f(), but it won't hurt to do it twice.
+ * with the H5AC_find(), but it won't hurt to do it twice.
*/
if (heap->obj[0].begin) {
for (i=0; i<f->shared->ncwfs; i++) {
@@ -788,7 +785,7 @@ done:
*-------------------------------------------------------------------------
*/
int
-H5HG_link (H5F_t *f, H5HG_t *hobj, int adjust)
+H5HG_link (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, int adjust)
{
H5HG_heap_t *heap = NULL;
int ret_value; /* Return value */
@@ -802,7 +799,7 @@ H5HG_link (H5F_t *f, H5HG_t *hobj, int adjust)
HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
/* Load the heap */
- if (NULL==(heap=H5AC_find_f (f, H5AC_GHEAP, hobj->addr, NULL, NULL)))
+ if (NULL==(heap=H5AC_find(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL)))
HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
assert (hobj->idx>0 && hobj->idx<heap->nalloc);
assert (heap->obj[hobj->idx].begin);
@@ -837,7 +834,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5HG_remove (H5F_t *f, H5HG_t *hobj)
+H5HG_remove (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj)
{
uint8_t *p=NULL, *obj_start=NULL;
H5HG_heap_t *heap = NULL;
@@ -855,7 +852,7 @@ H5HG_remove (H5F_t *f, H5HG_t *hobj)
HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
/* Load the heap */
- if (NULL==(heap=H5AC_find_f (f, H5AC_GHEAP, hobj->addr, NULL, NULL)))
+ if (NULL==(heap=H5AC_find(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL)))
HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
assert (hobj->idx>0 && hobj->idx<heap->nalloc);
assert (heap->obj[hobj->idx].begin);
@@ -893,13 +890,14 @@ H5HG_remove (H5F_t *f, H5HG_t *hobj)
* to the file free list.
*/
heap->dirty = FALSE;
- H5MF_xfree(f, H5FD_MEM_GHEAP, heap->addr, (hsize_t)heap->size);
- H5AC_flush (f, H5AC_GHEAP, heap->addr, TRUE);
+ H5_CHECK_OVERFLOW(heap->size,size_t,hsize_t);
+ H5MF_xfree(f, H5FD_MEM_GHEAP, dxpl_id, heap->addr, (hsize_t)heap->size);
+ H5AC_flush (f, dxpl_id, H5AC_GHEAP, heap->addr, TRUE);
heap = NULL;
} else {
/*
* If the heap is in the CWFS list then advance it one position. The
- * H5AC_find_f() might have done that too, but that's okay. If the
+ * H5AC_find() might have done that too, but that's okay. If the
* heap isn't on the CWFS list then add it to the end.
*/
for (i=0; i<f->shared->ncwfs; i++) {
@@ -939,7 +937,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5HG_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent,
+H5HG_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
int fwidth)
{
unsigned u, nused, maxobj;
@@ -959,7 +957,7 @@ H5HG_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent,
assert(indent >= 0);
assert(fwidth >= 0);
- if (NULL == (h = H5AC_find_f(f, H5AC_GHEAP, addr, NULL, NULL)))
+ if (NULL == (h = H5AC_find(f, dxpl_id, H5AC_GHEAP, addr, NULL, NULL)))
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load global heap collection");
fprintf(stream, "%*sGlobal Heap Collection...\n", indent, "");
fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
diff --git a/src/H5HGprivate.h b/src/H5HGprivate.h
index 28c6736..ac42683 100644
--- a/src/H5HGprivate.h
+++ b/src/H5HGprivate.h
@@ -96,14 +96,14 @@ typedef struct H5HG_t {
typedef struct H5HG_heap_t H5HG_heap_t;
-H5_DLL H5HG_heap_t *H5HG_create(H5F_t *f, size_t size);
-H5_DLL herr_t H5HG_insert(H5F_t *f, size_t size, void *obj,
+H5_DLL H5HG_heap_t *H5HG_create(H5F_t *f, hid_t dxpl_id, size_t size);
+H5_DLL herr_t H5HG_insert(H5F_t *f, hid_t dxpl_id, size_t size, void *obj,
H5HG_t *hobj/*out*/);
-H5_DLL void *H5HG_peek(H5F_t *f, H5HG_t *hobj);
-H5_DLL void *H5HG_read(H5F_t *f, H5HG_t *hobj, void *object);
-H5_DLL int H5HG_link(H5F_t *f, H5HG_t *hobj, int adjust);
-H5_DLL herr_t H5HG_remove(H5F_t *f, H5HG_t *hobj);
-H5_DLL herr_t H5HG_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent,
+H5_DLL void *H5HG_peek(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj);
+H5_DLL void *H5HG_read(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, void *object);
+H5_DLL int H5HG_link(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, int adjust);
+H5_DLL herr_t H5HG_remove(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj);
+H5_DLL herr_t H5HG_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
int fwidth);
#endif
diff --git a/src/H5HL.c b/src/H5HL.c
index 2f77502..fcbff03 100644
--- a/src/H5HL.c
+++ b/src/H5HL.c
@@ -55,6 +55,7 @@ typedef struct H5HL_t {
static H5HL_t *H5HL_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *udata1,
void *udata2);
static herr_t H5HL_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, H5HL_t *heap);
+static herr_t H5HL_dest(H5F_t *f, H5HL_t *heap);
/*
* H5HL inherits cache-like properties from H5AC
@@ -63,6 +64,7 @@ static const H5AC_class_t H5AC_LHEAP[1] = {{
H5AC_LHEAP_ID,
(H5AC_load_func_t)H5HL_load,
(H5AC_flush_func_t)H5HL_flush,
+ (H5AC_dest_func_t)H5HL_dest,
}};
/* Interface initialization */
@@ -107,7 +109,7 @@ H5FL_BLK_DEFINE_STATIC(heap_chunk);
*-------------------------------------------------------------------------
*/
herr_t
-H5HL_create(H5F_t *f, size_t size_hint, haddr_t *addr_p/*out*/)
+H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr_p/*out*/)
{
H5HL_t *heap = NULL;
hsize_t total_size; /*total heap size on disk */
@@ -120,9 +122,8 @@ H5HL_create(H5F_t *f, size_t size_hint, haddr_t *addr_p/*out*/)
assert(f);
assert(addr_p);
- if (size_hint && size_hint < H5HL_SIZEOF_FREE(f)) {
+ if (size_hint && size_hint < H5HL_SIZEOF_FREE(f))
size_hint = H5HL_SIZEOF_FREE(f);
- }
size_hint = H5HL_ALIGN(size_hint);
/* Cache this for later */
@@ -130,30 +131,22 @@ H5HL_create(H5F_t *f, size_t size_hint, haddr_t *addr_p/*out*/)
/* allocate file version */
total_size = sizeof_hdr + size_hint;
- if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_LHEAP, total_size))) {
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
- "unable to allocate file memory");
- }
+ if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_LHEAP, dxpl_id, total_size)))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate file memory");
/* allocate memory version */
- if (NULL==(heap = H5FL_CALLOC(H5HL_t))) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL,
- "memory allocation failed");
- }
+ if (NULL==(heap = H5FL_CALLOC(H5HL_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
heap->addr = *addr_p + (hsize_t)sizeof_hdr;
heap->disk_alloc = size_hint;
heap->mem_alloc = size_hint;
- if (NULL==(heap->chunk = H5FL_BLK_CALLOC(heap_chunk,(sizeof_hdr + size_hint)))) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL,
- "memory allocation failed");
- }
+ if (NULL==(heap->chunk = H5FL_BLK_CALLOC(heap_chunk,(sizeof_hdr + size_hint))))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
/* free list */
if (size_hint) {
- if (NULL==(heap->freelist = H5FL_MALLOC(H5HL_free_t))) {
- HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL,
- "memory allocation failed");
- }
+ if (NULL==(heap->freelist = H5FL_MALLOC(H5HL_free_t)))
+ HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
heap->freelist->offset = 0;
heap->freelist->size = size_hint;
heap->freelist->prev = heap->freelist->next = NULL;
@@ -163,25 +156,22 @@ H5HL_create(H5F_t *f, size_t size_hint, haddr_t *addr_p/*out*/)
/* add to cache */
heap->dirty = 1;
- if (H5AC_set(f, H5AC_LHEAP, *addr_p, heap) < 0) {
- HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL,
- "unable to cache heap");
- }
+ if (H5AC_set(f, dxpl_id, H5AC_LHEAP, *addr_p, heap) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "unable to cache heap");
ret_value = SUCCEED;
- done:
+done:
if (ret_value<0) {
- if (H5F_addr_defined(*addr_p)) {
- H5MF_xfree(f, H5FD_MEM_LHEAP, *addr_p, total_size);
- }
+ if (H5F_addr_defined(*addr_p))
+ H5MF_xfree(f, H5FD_MEM_LHEAP, dxpl_id, *addr_p, total_size);
if (heap) {
- H5FL_BLK_FREE (heap_chunk,heap->chunk);
- H5FL_FREE (H5HL_free_t,heap->freelist);
- H5FL_FREE (H5HL_t,heap);
+ if(H5HL_dest(f,heap)<0)
+ HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap collection");
}
}
FUNC_LEAVE_NOAPI(ret_value);
}
+
/*-------------------------------------------------------------------------
* Function: H5HL_load
@@ -288,13 +278,8 @@ H5HL_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED udata1,
done:
if (!ret_value && heap) {
- if(heap->chunk)
- heap->chunk = H5FL_BLK_FREE(heap_chunk,heap->chunk);
- for (fl = heap->freelist; fl; fl = tail) {
- tail = fl->next;
- H5FL_FREE(H5HL_free_t,fl);
- }
- H5FL_FREE(H5HL_t,heap);
+ if(H5HL_dest(f,heap)<0)
+ HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, NULL, "unable to destroy local heap collection");
}
FUNC_LEAVE_NOAPI(ret_value);
@@ -352,11 +337,13 @@ H5HL_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5HL_t *heap)
*/
if (heap->mem_alloc > heap->disk_alloc) {
haddr_t old_addr = heap->addr, new_addr;
- if (HADDR_UNDEF==(new_addr=H5MF_alloc(f, H5FD_MEM_LHEAP,
+ H5_CHECK_OVERFLOW(heap->mem_alloc,size_t,hsize_t);
+ if (HADDR_UNDEF==(new_addr=H5MF_alloc(f, H5FD_MEM_LHEAP, dxpl_id,
(hsize_t)heap->mem_alloc)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate file space for heap");
heap->addr = new_addr;
- H5MF_xfree(f, H5FD_MEM_LHEAP, old_addr, (hsize_t)heap->disk_alloc);
+ H5_CHECK_OVERFLOW(heap->disk_alloc,size_t,hsize_t);
+ H5MF_xfree(f, H5FD_MEM_LHEAP, dxpl_id, old_addr, (hsize_t)heap->disk_alloc);
H5E_clear(); /*don't really care if the free failed */
heap->disk_alloc = heap->mem_alloc;
}
@@ -415,13 +402,8 @@ H5HL_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5HL_t *heap)
* Should we destroy the memory version?
*/
if (destroy) {
- heap->chunk = H5FL_BLK_FREE(heap_chunk,heap->chunk);
- while (heap->freelist) {
- fl = heap->freelist;
- heap->freelist = fl->next;
- H5FL_FREE(H5HL_free_t,fl);
- }
- H5FL_FREE(H5HL_t,heap);
+ if(H5HL_dest(f,heap)<0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap collection");
}
done:
@@ -430,6 +412,47 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5HL_dest
+ *
+ * Purpose: Destroys a heap in memory.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Jan 15 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HL_dest(H5F_t UNUSED *f, H5HL_t *heap)
+{
+ H5HL_free_t *fl;
+
+ FUNC_ENTER_NOINIT(H5HL_dest);
+
+ /* check arguments */
+ assert(heap);
+
+ /* Verify that node is clean */
+ assert (heap->cache_info.dirty==0);
+
+ if(heap->chunk)
+ heap->chunk = H5FL_BLK_FREE(heap_chunk,heap->chunk);
+ while (heap->freelist) {
+ fl = heap->freelist;
+ heap->freelist = fl->next;
+ H5FL_FREE(H5HL_free_t,fl);
+ }
+ H5FL_FREE(H5HL_t,heap);
+
+ FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
* Function: H5HL_read
*
* Purpose: Reads some object (or part of an object) from the heap
@@ -457,7 +480,7 @@ done:
*-------------------------------------------------------------------------
*/
void *
-H5HL_read(H5F_t *f, haddr_t addr, size_t offset, size_t size, void *buf)
+H5HL_read(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size, void *buf)
{
H5HL_t *heap = NULL;
void *ret_value; /* Return value */
@@ -468,7 +491,7 @@ H5HL_read(H5F_t *f, haddr_t addr, size_t offset, size_t size, void *buf)
assert(f);
assert (H5F_addr_defined(addr));
- if (NULL == (heap = H5AC_find_f(f, H5AC_LHEAP, addr, NULL, NULL)))
+ if (NULL == (heap = H5AC_find(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL)))
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "unable to load heap");
assert(offset < heap->mem_alloc);
assert(offset + size <= heap->mem_alloc);
@@ -517,7 +540,7 @@ done:
*-------------------------------------------------------------------------
*/
const void *
-H5HL_peek(H5F_t *f, haddr_t addr, size_t offset)
+H5HL_peek(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset)
{
H5HL_t *heap;
const void *ret_value;
@@ -528,7 +551,7 @@ H5HL_peek(H5F_t *f, haddr_t addr, size_t offset)
assert(f);
assert(H5F_addr_defined(addr));
- if (NULL == (heap = H5AC_find_f(f, H5AC_LHEAP, addr, NULL, NULL)))
+ if (NULL == (heap = H5AC_find(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL)))
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "unable to load heap");
assert(offset < heap->mem_alloc);
@@ -589,7 +612,7 @@ H5HL_remove_free(H5HL_t *heap, H5HL_free_t *fl)
*-------------------------------------------------------------------------
*/
size_t
-H5HL_insert(H5F_t *f, haddr_t addr, size_t buf_size, const void *buf)
+H5HL_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t buf_size, const void *buf)
{
H5HL_t *heap = NULL;
H5HL_free_t *fl = NULL, *max_fl = NULL;
@@ -609,7 +632,7 @@ H5HL_insert(H5F_t *f, haddr_t addr, size_t buf_size, const void *buf)
if (0==(f->intent & H5F_ACC_RDWR))
HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, (size_t)(-1), "no write intent on file");
- if (NULL == (heap = H5AC_find_f(f, H5AC_LHEAP, addr, NULL, NULL)))
+ if (NULL == (heap = H5AC_find(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL)))
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, (size_t)(-1), "unable to load heap");
heap->dirty += 1;
@@ -758,7 +781,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5HL_write(H5F_t *f, haddr_t addr, size_t offset, size_t size, const void *buf)
+H5HL_write(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size, const void *buf)
{
H5HL_t *heap = NULL;
herr_t ret_value=SUCCEED; /* Return value */
@@ -773,7 +796,7 @@ H5HL_write(H5F_t *f, haddr_t addr, size_t offset, size_t size, const void *buf)
if (0==(f->intent & H5F_ACC_RDWR))
HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
- if (NULL == (heap = H5AC_find_f(f, H5AC_LHEAP, addr, NULL, NULL)))
+ if (NULL == (heap = H5AC_find(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL)))
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
assert(offset < heap->mem_alloc);
assert(offset + size <= heap->mem_alloc);
@@ -814,7 +837,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5HL_remove(H5F_t *f, haddr_t addr, size_t offset, size_t size)
+H5HL_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size)
{
H5HL_t *heap = NULL;
H5HL_free_t *fl = NULL, *fl2 = NULL;
@@ -831,7 +854,7 @@ H5HL_remove(H5F_t *f, haddr_t addr, size_t offset, size_t size)
HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
size = H5HL_ALIGN (size);
- if (NULL == (heap = H5AC_find_f(f, H5AC_LHEAP, addr, NULL, NULL)))
+ if (NULL == (heap = H5AC_find(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL)))
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
assert(offset < heap->mem_alloc);
assert(offset + size <= heap->mem_alloc);
@@ -933,7 +956,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5HL_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent, int fwidth)
+H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent, int fwidth)
{
H5HL_t *h = NULL;
int i, j, overlap;
@@ -952,7 +975,7 @@ H5HL_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent, int fwidth)
assert(indent >= 0);
assert(fwidth >= 0);
- if (NULL == (h = H5AC_find_f(f, H5AC_LHEAP, addr, NULL, NULL)))
+ if (NULL == (h = H5AC_find(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL)))
HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
fprintf(stream, "%*sLocal Heap...\n", indent, "");
fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
diff --git a/src/H5HLprivate.h b/src/H5HLprivate.h
index 3aa630e..70e9d71 100644
--- a/src/H5HLprivate.h
+++ b/src/H5HLprivate.h
@@ -50,15 +50,15 @@
/*
* Library prototypes...
*/
-H5_DLL herr_t H5HL_create(H5F_t *f, size_t size_hint, haddr_t *addr/*out*/);
-H5_DLL void *H5HL_read(H5F_t *f, haddr_t addr, size_t offset, size_t size,
+H5_DLL herr_t H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr/*out*/);
+H5_DLL void *H5HL_read(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size,
void *buf);
-H5_DLL const void *H5HL_peek(H5F_t *f, haddr_t addr, size_t offset);
-H5_DLL size_t H5HL_insert(H5F_t *f, haddr_t addr, size_t size,
+H5_DLL const void *H5HL_peek(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset);
+H5_DLL size_t H5HL_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t size,
const void *buf);
-H5_DLL herr_t H5HL_write(H5F_t *f, haddr_t addr, size_t offset, size_t size,
+H5_DLL herr_t H5HL_write(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size,
const void *buf);
-H5_DLL herr_t H5HL_remove(H5F_t *f, haddr_t addr, size_t offset, size_t size);
-H5_DLL herr_t H5HL_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent,
+H5_DLL herr_t H5HL_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size);
+H5_DLL herr_t H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
int fwidth);
#endif
diff --git a/src/H5MF.c b/src/H5MF.c
index 12fd240..4fcb23f 100644
--- a/src/H5MF.c
+++ b/src/H5MF.c
@@ -57,7 +57,7 @@ static int interface_initialize_g = 0;
*-------------------------------------------------------------------------
*/
haddr_t
-H5MF_alloc(H5F_t *f, H5FD_mem_t type, hsize_t size)
+H5MF_alloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
{
haddr_t ret_value;
@@ -72,7 +72,7 @@ H5MF_alloc(H5F_t *f, H5FD_mem_t type, hsize_t size)
HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, HADDR_UNDEF, "file is read-only");
/* Allocate space from the virtual file layer */
- if (HADDR_UNDEF==(ret_value=H5FD_alloc(f->shared->lf, type, size)))
+ if (HADDR_UNDEF==(ret_value=H5FD_alloc(f->shared->lf, type, dxpl_id, size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "file allocation failed");
/* Convert absolute file address to relative file address */
@@ -107,7 +107,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5MF_xfree(H5F_t *f, H5FD_mem_t type, haddr_t addr, hsize_t size)
+H5MF_xfree(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -123,7 +123,7 @@ H5MF_xfree(H5F_t *f, H5FD_mem_t type, haddr_t addr, hsize_t size)
addr += f->shared->base_addr;
/* Allow virtual file layer to free block */
- if (H5FD_free(f->shared->lf, type, addr, size)<0) {
+ if (H5FD_free(f->shared->lf, type, dxpl_id, addr, size)<0) {
#ifdef H5MF_DEBUG
if (H5DEBUG(MF)) {
fprintf(H5DEBUG(MF),
@@ -174,7 +174,7 @@ done:
*-------------------------------------------------------------------------
*/
haddr_t
-H5MF_realloc(H5F_t *f, H5FD_mem_t type, haddr_t old_addr, hsize_t old_size,
+H5MF_realloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr, hsize_t old_size,
hsize_t new_size)
{
haddr_t ret_value;
@@ -185,7 +185,7 @@ H5MF_realloc(H5F_t *f, H5FD_mem_t type, haddr_t old_addr, hsize_t old_size,
old_addr += f->shared->base_addr;
/* Reallocate memory from the virtual file layer */
- ret_value = H5FD_realloc(f->shared->lf, type, old_addr, old_size,
+ ret_value = H5FD_realloc(f->shared->lf, type, dxpl_id, old_addr, old_size,
new_size);
if (HADDR_UNDEF==ret_value)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "unable to allocate new file memory");
diff --git a/src/H5MFprivate.h b/src/H5MFprivate.h
index 1c72507..7cd5995 100644
--- a/src/H5MFprivate.h
+++ b/src/H5MFprivate.h
@@ -33,10 +33,10 @@
/*
* Library prototypes...
*/
-H5_DLL haddr_t H5MF_alloc(H5F_t *f, H5FD_mem_t type, hsize_t size);
-H5_DLL herr_t H5MF_xfree(H5F_t *f, H5FD_mem_t type, haddr_t addr,
+H5_DLL haddr_t H5MF_alloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+H5_DLL herr_t H5MF_xfree(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
hsize_t size);
-H5_DLL haddr_t H5MF_realloc(H5F_t *f, H5FD_mem_t type, haddr_t old_addr,
+H5_DLL haddr_t H5MF_realloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr,
hsize_t old_size, hsize_t new_size);
#endif
diff --git a/src/H5O.c b/src/H5O.c
index 741438c..29d1dd6 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -34,10 +34,17 @@
#define PABLO_MASK H5O_mask
/* PRIVATE PROTOTYPES */
-static herr_t H5O_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5O_t *oh);
+static herr_t H5O_init(H5F_t *f, hid_t dxpl_id, size_t size_hint,
+ H5G_entry_t *ent/*out*/, haddr_t header);
static H5O_t *H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_udata1,
void *_udata2);
-static unsigned H5O_find_in_ohdr(H5F_t *f, haddr_t addr,
+static herr_t H5O_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5O_t *oh);
+static herr_t H5O_dest(H5F_t *f, H5O_t *oh);
+#ifdef NOT_YET
+static herr_t H5O_share(H5F_t *f, hid_t dxpl_id, const H5O_class_t *type, const void *mesg,
+ H5HG_t *hobj/*out*/);
+#endif /* NOT_YET */
+static unsigned H5O_find_in_ohdr(H5F_t *f, hid_t dxpl_id, haddr_t addr,
const H5O_class_t **type_p, int sequence);
static unsigned H5O_alloc(H5F_t *f, H5O_t *oh, const H5O_class_t *type,
size_t size);
@@ -49,6 +56,7 @@ static const H5AC_class_t H5AC_OHDR[1] = {{
H5AC_OHDR_ID,
(H5AC_load_func_t)H5O_load,
(H5AC_flush_func_t)H5O_flush,
+ (H5AC_dest_func_t)H5O_dest,
}};
/* Interface initialization */
@@ -165,7 +173,7 @@ H5O_init_interface(void)
*-------------------------------------------------------------------------
*/
herr_t
-H5O_create(H5F_t *f, size_t size_hint, H5G_entry_t *ent/*out*/)
+H5O_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, H5G_entry_t *ent/*out*/)
{
haddr_t header;
herr_t ret_value = SUCCEED; /* return value */
@@ -179,13 +187,13 @@ H5O_create(H5F_t *f, size_t size_hint, H5G_entry_t *ent/*out*/)
size_hint = H5O_ALIGN (MAX (H5O_MIN_SIZE, size_hint));
/* allocate disk space for header and first chunk */
- if (HADDR_UNDEF == (header = H5MF_alloc(f, H5FD_MEM_OHDR,
+ if (HADDR_UNDEF == (header = H5MF_alloc(f, H5FD_MEM_OHDR, dxpl_id,
(hsize_t)H5O_SIZEOF_HDR(f) + size_hint)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
"file allocation failed for object header header");
/* initialize the object header */
- if (H5O_init(f, size_hint, ent, header) != SUCCEED)
+ if (H5O_init(f, dxpl_id, size_hint, ent, header) != SUCCEED)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to initialize object header");
done:
@@ -213,14 +221,14 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5O_init(H5F_t *f, size_t size_hint, H5G_entry_t *ent/*out*/, haddr_t header)
+static herr_t
+H5O_init(H5F_t *f, hid_t dxpl_id, size_t size_hint, H5G_entry_t *ent/*out*/, haddr_t header)
{
H5O_t *oh = NULL;
haddr_t tmp_addr;
herr_t ret_value = SUCCEED; /* return value */
- FUNC_ENTER_NOAPI(H5O_init, FAIL);
+ FUNC_ENTER_NOINIT(H5O_init);
/* check args */
assert(f);
@@ -234,7 +242,7 @@ H5O_init(H5F_t *f, size_t size_hint, H5G_entry_t *ent/*out*/, haddr_t header)
if (NULL == (oh = H5FL_MALLOC(H5O_t)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
- oh->dirty = TRUE;
+ oh->cache_info.dirty = TRUE;
oh->version = H5O_VERSION;
oh->nlink = 0;
@@ -268,16 +276,19 @@ H5O_init(H5F_t *f, size_t size_hint, H5G_entry_t *ent/*out*/, haddr_t header)
oh->mesg[0].chunkno = 0;
/* cache it */
- if (H5AC_set(f, H5AC_OHDR, ent->header, oh) < 0) {
- H5FL_FREE(H5O_t,oh);
+ if (H5AC_set(f, dxpl_id, H5AC_OHDR, ent->header, oh) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to cache object header");
- }
/* open it */
if (H5O_open(ent) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_CANTOPENOBJ, FAIL, "unable to open object header");
done:
+ if(ret_value<0 && oh) {
+ if(H5O_dest(f,oh)<0)
+ HDONE_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to destroy object header data");
+ } /* end if */
+
FUNC_LEAVE_NOAPI(ret_value);
}
@@ -544,7 +555,7 @@ H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED _udata1,
if (H5O_CONT_ID == oh->mesg[curmesg].type->id) {
uint8_t *p2 = oh->mesg[curmesg].raw;
- cont = (H5O_CONT->decode) (f, p2, NULL);
+ cont = (H5O_CONT->decode) (f, dxpl_id, p2, NULL);
oh->mesg[curmesg].native = cont;
chunk_addr = cont->addr;
chunk_size = cont->size;
@@ -558,16 +569,8 @@ H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED _udata1,
done:
if (!ret_value && oh) {
- /*
- * Free resources.
- */
- unsigned u;
-
- for (u = 0; u < oh->nchunks; u++)
- oh->chunk[u].image = H5FL_BLK_FREE(chunk_image,oh->chunk[u].image);
- oh->chunk = H5FL_ARR_FREE(H5O_chunk_t,oh->chunk);
- oh->mesg = H5FL_ARR_FREE(H5O_mesg_t,oh->mesg);
- H5FL_FREE(H5O_t,oh);
+ if(H5O_dest(f,oh)<0)
+ HDONE_ERROR(H5E_OHDR, H5E_CANTFREE, NULL, "unable to destroy object header data");
}
FUNC_LEAVE_NOAPI(ret_value);
@@ -621,7 +624,7 @@ H5O_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5O_t *oh)
assert(oh);
/* flush */
- if (oh->dirty) {
+ if (oh->cache_info.dirty) {
p = buf;
/* encode version */
@@ -679,7 +682,7 @@ H5O_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5O_t *oh)
assert(!H5F_addr_defined(oh->chunk[cont->chunkno].addr));
cont->size = oh->chunk[cont->chunkno].size;
if (HADDR_UNDEF==(cont->addr=H5MF_alloc(f,
- H5FD_MEM_OHDR, (hsize_t)cont->size)))
+ H5FD_MEM_OHDR, dxpl_id, (hsize_t)cont->size)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate space for object header data");
oh->chunk[cont->chunkno].addr = cont->addr;
}
@@ -742,27 +745,12 @@ H5O_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5O_t *oh)
oh->chunk[u].dirty = FALSE;
} /* end if */
} /* end for */
- oh->dirty = FALSE;
+ oh->cache_info.dirty = FALSE;
}
if (destroy) {
- /* destroy chunks */
- for (u = 0; u < oh->nchunks; u++)
- oh->chunk[u].image = H5FL_BLK_FREE(chunk_image,oh->chunk[u].image);
- oh->chunk = H5FL_ARR_FREE(H5O_chunk_t,oh->chunk);
-
- /* destroy messages */
- for (u = 0, curr_msg=&oh->mesg[0]; u < oh->nmesgs; u++,curr_msg++) {
- if (curr_msg->flags & H5O_FLAG_SHARED) {
- H5O_free(H5O_SHARED, curr_msg->native);
- } else {
- H5O_free(curr_msg->type, curr_msg->native);
- }
- }
- oh->mesg = H5FL_ARR_FREE(H5O_mesg_t,oh->mesg);
-
- /* destroy object header */
- H5FL_FREE(H5O_t,oh);
+ if(H5O_dest(f,oh)<0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to destroy object header data");
}
done:
@@ -771,6 +759,62 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5O_dest
+ *
+ * Purpose: Destroys an object header.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Quincey Koziol
+ * koziol@ncsa.uiuc.edu
+ * Jan 15 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_dest(H5F_t UNUSED *f, H5O_t *oh)
+{
+ unsigned i;
+
+ FUNC_ENTER_NOINIT(H5O_dest);
+
+ /* check args */
+ assert(oh);
+
+ /* Verify that node is clean */
+ assert (oh->cache_info.dirty==0);
+
+ /* destroy chunks */
+ for (i = 0; i < oh->nchunks; i++) {
+ /* Verify that chunk is clean */
+ assert (oh->chunk[i].dirty==0);
+
+ oh->chunk[i].image = H5FL_BLK_FREE(chunk_image,oh->chunk[i].image);
+ }
+ oh->chunk = H5FL_ARR_FREE(H5O_chunk_t,oh->chunk);
+
+ /* destroy messages */
+ for (i = 0; i < oh->nmesgs; i++) {
+ /* Verify that message is clean */
+ assert (oh->mesg[i].dirty==0);
+
+ if (oh->mesg[i].flags & H5O_FLAG_SHARED)
+ H5O_free(H5O_SHARED, oh->mesg[i].native);
+ else
+ H5O_free(oh->mesg[i].type, oh->mesg[i].native);
+ }
+ oh->mesg = H5FL_ARR_FREE(H5O_mesg_t,oh->mesg);
+
+ /* destroy object header */
+ H5FL_FREE(H5O_t,oh);
+
+ FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
* Function: H5O_reset
*
* Purpose: Some message data structures have internal fields that
@@ -907,7 +951,7 @@ done:
*-------------------------------------------------------------------------
*/
int
-H5O_link(H5G_entry_t *ent, int adjust)
+H5O_link(H5G_entry_t *ent, int adjust, hid_t dxpl_id)
{
H5O_t *oh = NULL;
int ret_value = FAIL;
@@ -922,7 +966,7 @@ H5O_link(H5G_entry_t *ent, int adjust)
HGOTO_ERROR (H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file");
/* get header */
- if (NULL == (oh = H5AC_protect(ent->file, H5AC_OHDR, ent->header,
+ if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header,
NULL, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
@@ -931,17 +975,17 @@ H5O_link(H5G_entry_t *ent, int adjust)
if (oh->nlink + adjust < 0)
HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, FAIL, "link count would be negative");
oh->nlink += adjust;
- oh->dirty = TRUE;
+ oh->cache_info.dirty = TRUE;
} else if (adjust>0) {
oh->nlink += adjust;
- oh->dirty = TRUE;
+ oh->cache_info.dirty = TRUE;
}
/* Set return value */
ret_value = oh->nlink;
done:
- if (oh && H5AC_unprotect(ent->file, H5AC_OHDR, ent->header, oh) < 0 && ret_value>=0)
+ if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh) < 0 && ret_value>=0)
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
FUNC_LEAVE_NOAPI(ret_value);
@@ -966,7 +1010,7 @@ done:
*-------------------------------------------------------------------------
*/
int
-H5O_count (H5G_entry_t *ent, const H5O_class_t *type)
+H5O_count (H5G_entry_t *ent, const H5O_class_t *type, hid_t dxpl_id)
{
H5O_t *oh = NULL;
int acc;
@@ -982,7 +1026,7 @@ H5O_count (H5G_entry_t *ent, const H5O_class_t *type)
assert (type);
/* Load the object header */
- if (NULL==(oh=H5AC_find_f (ent->file, H5AC_OHDR, ent->header, NULL, NULL)))
+ if (NULL==(oh=H5AC_find(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL)))
HGOTO_ERROR (H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
for (u=acc=0; u<oh->nmesgs; u++) {
@@ -1019,7 +1063,7 @@ done:
*-------------------------------------------------------------------------
*/
htri_t
-H5O_exists(H5G_entry_t *ent, const H5O_class_t *type, int sequence)
+H5O_exists(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t dxpl_id)
{
H5O_t *oh=NULL;
unsigned u;
@@ -1033,7 +1077,7 @@ H5O_exists(H5G_entry_t *ent, const H5O_class_t *type, int sequence)
assert(sequence>=0);
/* Load the object header */
- if (NULL==(oh=H5AC_find_f(ent->file, H5AC_OHDR, ent->header, NULL, NULL)))
+ if (NULL==(oh=H5AC_find(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
/* Scan through the messages looking for the right one */
@@ -1078,7 +1122,7 @@ done:
*-------------------------------------------------------------------------
*/
void *
-H5O_read(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mesg)
+H5O_read(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mesg, hid_t dxpl_id)
{
H5O_t *oh = NULL;
void *ret_value = NULL;
@@ -1105,11 +1149,11 @@ H5O_read(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mesg)
}
/* can we get it from the object header? */
- if ((idx = H5O_find_in_ohdr(ent->file, ent->header, &type, sequence)) < 0)
+ if ((idx = H5O_find_in_ohdr(ent->file, dxpl_id, ent->header, &type, sequence)) < 0)
HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, NULL, "unable to find message in object header");
/* copy the message to the user-supplied buffer */
- if (NULL == (oh = H5AC_protect(ent->file, H5AC_OHDR, ent->header, NULL, NULL)))
+ if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "unable to load object header");
if (oh->mesg[idx].flags & H5O_FLAG_SHARED) {
/*
@@ -1122,9 +1166,9 @@ H5O_read(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mesg)
shared = (H5O_shared_t *)(oh->mesg[idx].native);
if (shared->in_gh) {
- if (NULL==(tmp_buf = H5HG_read (ent->file, &(shared->u.gh), NULL)))
+ if (NULL==(tmp_buf = H5HG_read (ent->file, dxpl_id, &(shared->u.gh), NULL)))
HGOTO_ERROR (H5E_OHDR, H5E_CANTLOAD, NULL, "unable to read shared message from global heap");
- tmp_mesg = (type->decode)(ent->file, tmp_buf, shared);
+ tmp_mesg = (type->decode)(ent->file, dxpl_id, tmp_buf, shared);
tmp_buf = H5MM_xfree (tmp_buf);
if (!tmp_mesg)
HGOTO_ERROR (H5E_OHDR, H5E_CANTLOAD, NULL, "unable to decode object header shared message");
@@ -1135,7 +1179,7 @@ H5O_read(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mesg)
ret_value = tmp_mesg;
}
} else {
- ret_value = H5O_read (&(shared->u.ent), type, 0, mesg);
+ ret_value = H5O_read (&(shared->u.ent), type, 0, mesg, dxpl_id);
if (type->set_share &&
(type->set_share)(ent->file, ret_value, shared)<0)
HGOTO_ERROR (H5E_OHDR, H5E_CANTINIT, NULL, "unable to set sharing information");
@@ -1152,7 +1196,7 @@ H5O_read(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mesg)
}
done:
- if (oh && H5AC_unprotect(ent->file, H5AC_OHDR, ent->header, oh) < 0 && ret_value!=NULL)
+ if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh) < 0 && ret_value!=NULL)
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, NULL, "unable to release object header");
FUNC_LEAVE_NOAPI(ret_value);
@@ -1179,7 +1223,7 @@ done:
*-------------------------------------------------------------------------
*/
static unsigned
-H5O_find_in_ohdr(H5F_t *f, haddr_t addr, const H5O_class_t **type_p,
+H5O_find_in_ohdr(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5O_class_t **type_p,
int sequence)
{
H5O_t *oh = NULL;
@@ -1195,7 +1239,7 @@ H5O_find_in_ohdr(H5F_t *f, haddr_t addr, const H5O_class_t **type_p,
assert(type_p);
/* Load the object header */
- if (NULL == (oh = H5AC_find_f(f, H5AC_OHDR, addr, NULL, NULL)))
+ if (NULL == (oh = H5AC_find(f, dxpl_id, H5AC_OHDR, addr, NULL, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, UFAIL, "unable to load object header");
/* Scan through the messages looking for the right one */
@@ -1219,7 +1263,7 @@ H5O_find_in_ohdr(H5F_t *f, haddr_t addr, const H5O_class_t **type_p,
}
if (NULL == oh->mesg[u].native) {
assert(type->decode);
- oh->mesg[u].native = (type->decode) (f, oh->mesg[u].raw, NULL);
+ oh->mesg[u].native = (type->decode) (f, dxpl_id, oh->mesg[u].raw, NULL);
if (NULL == oh->mesg[u].native)
HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, UFAIL, "unable to decode message");
}
@@ -1281,7 +1325,7 @@ done:
*/
int
H5O_modify(H5G_entry_t *ent, const H5O_class_t *type, int overwrite,
- unsigned flags, unsigned update_time, const void *mesg)
+ unsigned flags, unsigned update_time, const void *mesg, hid_t dxpl_id)
{
H5O_t *oh=NULL;
int sequence;
@@ -1304,7 +1348,7 @@ H5O_modify(H5G_entry_t *ent, const H5O_class_t *type, int overwrite,
if (0==(ent->file->intent & H5F_ACC_RDWR))
HGOTO_ERROR (H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file");
- if (NULL == (oh = H5AC_protect(ent->file, H5AC_OHDR, ent->header, NULL, NULL)))
+ if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
/* Count similar messages */
@@ -1345,7 +1389,7 @@ H5O_modify(H5G_entry_t *ent, const H5O_class_t *type, int overwrite,
* The shared message is stored in the global heap.
* Increment the reference count on the global heap message.
*/
- if (H5HG_link (ent->file, &(sh_mesg.u.gh), 1)<0)
+ if (H5HG_link (ent->file, dxpl_id, &(sh_mesg.u.gh), 1)<0)
HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to adjust shared object link count");
size = (H5O_SHARED->raw_size)(ent->file, &sh_mesg);
} else {
@@ -1357,7 +1401,7 @@ H5O_modify(H5G_entry_t *ent, const H5O_class_t *type, int overwrite,
*/
if (sh_mesg.u.ent.file->shared != ent->file->shared)
HGOTO_ERROR(H5E_OHDR, H5E_LINK, FAIL, "interfile hard links are not allowed");
- if (H5O_link (&(sh_mesg.u.ent), 1)<0)
+ if (H5O_link (&(sh_mesg.u.ent), 1, dxpl_id)<0)
HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to adjust shared object link count");
size = (H5O_SHARED->raw_size)(ent->file, &sh_mesg);
}
@@ -1401,13 +1445,13 @@ H5O_modify(H5G_entry_t *ent, const H5O_class_t *type, int overwrite,
idx_msg->flags = flags;
idx_msg->dirty = TRUE;
- oh->dirty = TRUE;
+ oh->cache_info.dirty = TRUE;
/* Set return value */
ret_value = sequence;
done:
- if (oh && H5AC_unprotect(ent->file, H5AC_OHDR, ent->header, oh) < 0 && ret_value!=FAIL)
+ if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh) < 0 && ret_value!=FAIL)
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
FUNC_LEAVE_NOAPI(ret_value);
@@ -1435,7 +1479,7 @@ done:
*-------------------------------------------------------------------------
*/
H5O_t *
-H5O_protect(H5G_entry_t *ent)
+H5O_protect(H5G_entry_t *ent, hid_t dxpl_id)
{
H5O_t *ret_value; /* Return value */
@@ -1449,7 +1493,7 @@ H5O_protect(H5G_entry_t *ent)
if (0==(ent->file->intent & H5F_ACC_RDWR))
HGOTO_ERROR (H5E_OHDR, H5E_WRITEERROR, NULL, "no write intent on file");
- if (NULL == (ret_value = H5AC_protect(ent->file, H5AC_OHDR, ent->header, NULL, NULL)))
+ if (NULL == (ret_value = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "unable to load object header");
done:
@@ -1477,7 +1521,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_unprotect(H5G_entry_t *ent, H5O_t *oh)
+H5O_unprotect(H5G_entry_t *ent, H5O_t *oh, hid_t dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -1489,7 +1533,7 @@ H5O_unprotect(H5G_entry_t *ent, H5O_t *oh)
assert(H5F_addr_defined(ent->header));
assert(oh);
- if (H5AC_unprotect(ent->file, H5AC_OHDR, ent->header, oh) < 0)
+ if (H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh) < 0)
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
done:
@@ -1524,7 +1568,7 @@ done:
*-------------------------------------------------------------------------
*/
int
-H5O_append(H5F_t *f, H5O_t *oh, const H5O_class_t *type,
+H5O_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_class_t *type,
unsigned flags, const void *mesg)
{
unsigned idx; /* Index of message to modify */
@@ -1560,7 +1604,7 @@ H5O_append(H5F_t *f, H5O_t *oh, const H5O_class_t *type,
* The shared message is stored in the global heap.
* Increment the reference count on the global heap message.
*/
- if (H5HG_link (f, &(sh_mesg.u.gh), 1)<0)
+ if (H5HG_link (f, dxpl_id, &(sh_mesg.u.gh), 1)<0)
HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to adjust shared object link count");
size = (H5O_SHARED->raw_size)(f, &sh_mesg);
} else {
@@ -1572,7 +1616,7 @@ H5O_append(H5F_t *f, H5O_t *oh, const H5O_class_t *type,
*/
if (sh_mesg.u.ent.file->shared != f->shared)
HGOTO_ERROR(H5E_OHDR, H5E_LINK, FAIL, "interfile hard links are not allowed");
- if (H5O_link (&(sh_mesg.u.ent), 1)<0)
+ if (H5O_link (&(sh_mesg.u.ent), 1, dxpl_id)<0)
HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to adjust shared object link count");
size = (H5O_SHARED->raw_size)(f, &sh_mesg);
}
@@ -1604,7 +1648,7 @@ H5O_append(H5F_t *f, H5O_t *oh, const H5O_class_t *type,
idx_msg->flags = flags;
idx_msg->dirty = TRUE;
- oh->dirty = TRUE;
+ oh->cache_info.dirty = TRUE;
/* Set return value */
ret_value = idx;
@@ -1674,7 +1718,7 @@ H5O_touch_oh(H5F_t *f, H5O_t *oh, hbool_t force)
}
*((time_t*)(oh->mesg[idx].native)) = now;
oh->mesg[idx].dirty = TRUE;
- oh->dirty = TRUE;
+ oh->cache_info.dirty = TRUE;
done:
FUNC_LEAVE_NOAPI(ret_value);
@@ -1699,7 +1743,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_touch(H5G_entry_t *ent, hbool_t force)
+H5O_touch(H5G_entry_t *ent, hbool_t force, hid_t dxpl_id)
{
H5O_t *oh = NULL;
herr_t ret_value=SUCCEED; /* Return value */
@@ -1714,7 +1758,7 @@ H5O_touch(H5G_entry_t *ent, hbool_t force)
HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file");
/* Get the object header */
- if (NULL==(oh=H5AC_protect(ent->file, H5AC_OHDR, ent->header, NULL, NULL)))
+ if (NULL==(oh=H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
/* Create/Update the modification time message */
@@ -1722,7 +1766,7 @@ H5O_touch(H5G_entry_t *ent, hbool_t force)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to update object modificaton time");
done:
- if (oh && H5AC_unprotect(ent->file, H5AC_OHDR, ent->header, oh)<0 && ret_value>=0)
+ if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh)<0 && ret_value>=0)
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
FUNC_LEAVE_NOAPI(ret_value);
@@ -1801,7 +1845,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_bogus(H5G_entry_t *ent)
+H5O_bogus(H5G_entry_t *ent, hid_t dxpl_id)
{
H5O_t *oh = NULL;
herr_t ret_value = SUCCEED;
@@ -1818,7 +1862,7 @@ H5O_bogus(H5G_entry_t *ent)
HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file");
/* Get the object header */
- if (NULL==(oh=H5AC_protect(ent->file, H5AC_OHDR, ent->header, NULL, NULL)))
+ if (NULL==(oh=H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
/* Create the "bogus" message */
@@ -1826,7 +1870,7 @@ H5O_bogus(H5G_entry_t *ent)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to update object 'bogus' message");
done:
- if (oh && H5AC_unprotect(ent->file, H5AC_OHDR, ent->header, oh)<0)
+ if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh)<0)
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
FUNC_LEAVE(ret_value);
@@ -1860,7 +1904,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_remove(H5G_entry_t *ent, const H5O_class_t *type, int sequence)
+H5O_remove(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t dxpl_id)
{
H5O_t *oh = NULL;
int seq, nfailed = 0;
@@ -1880,7 +1924,7 @@ H5O_remove(H5G_entry_t *ent, const H5O_class_t *type, int sequence)
HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
/* load the object header */
- if (NULL == (oh = H5AC_protect(ent->file, H5AC_OHDR, ent->header, NULL, NULL)))
+ if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
for (u = seq = 0; u < oh->nmesgs; u++) {
@@ -1898,16 +1942,16 @@ H5O_remove(H5G_entry_t *ent, const H5O_class_t *type, int sequence)
if (oh->mesg[u].flags & H5O_FLAG_SHARED) {
if (NULL==oh->mesg[u].native) {
- sh_mesg = (H5O_SHARED->decode)(ent->file, oh->mesg[u].raw,
+ sh_mesg = (H5O_SHARED->decode)(ent->file, dxpl_id, oh->mesg[u].raw,
NULL);
if (NULL==(oh->mesg[u].native = sh_mesg))
HGOTO_ERROR (H5E_OHDR, H5E_CANTDECODE, FAIL, "unable to decode shared message info");
}
if (sh_mesg->in_gh) {
- if (H5HG_link (ent->file, &(sh_mesg->u.gh), -1)<0)
+ if (H5HG_link (ent->file, dxpl_id, &(sh_mesg->u.gh), -1)<0)
HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to decrement link count on shared message");
} else {
- if (H5O_link (&(sh_mesg->u.ent), -1)<0)
+ if (H5O_link (&(sh_mesg->u.ent), -1, dxpl_id)<0)
HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to decrement link count on shared message");
}
}
@@ -1917,7 +1961,7 @@ H5O_remove(H5G_entry_t *ent, const H5O_class_t *type, int sequence)
HDmemset(oh->mesg[u].raw, 0, oh->mesg[u].raw_size);
oh->mesg[u].native = H5O_free (type, oh->mesg[u].native);
oh->mesg[u].dirty = TRUE;
- oh->dirty = TRUE;
+ oh->cache_info.dirty = TRUE;
H5O_touch_oh(ent->file, oh, FALSE);
}
}
@@ -1927,7 +1971,7 @@ H5O_remove(H5G_entry_t *ent, const H5O_class_t *type, int sequence)
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to remove constant message(s)");
done:
- if (oh && H5AC_unprotect(ent->file, H5AC_OHDR, ent->header, oh) < 0 && ret_value>=0)
+ if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh) < 0 && ret_value>=0)
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
FUNC_LEAVE_NOAPI(ret_value);
@@ -2374,7 +2418,7 @@ H5O_alloc(H5F_t *f, H5O_t *oh, const H5O_class_t *type, size_t size)
msg->dirty = TRUE;
msg->native = NULL;
- oh->dirty = TRUE;
+ oh->cache_info.dirty = TRUE;
/* Set return value */
ret_value=idx;
@@ -2383,6 +2427,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value);
}
+#ifdef NOT_YET
/*-------------------------------------------------------------------------
* Function: H5O_share
@@ -2401,15 +2446,15 @@ done:
*
*-------------------------------------------------------------------------
*/
-herr_t
-H5O_share (H5F_t *f, const H5O_class_t *type, const void *mesg,
+static herr_t
+H5O_share (H5F_t *f, hid_t dxpl_id, const H5O_class_t *type, const void *mesg,
H5HG_t *hobj/*out*/)
{
size_t size;
void *buf = NULL;
herr_t ret_value=SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(H5O_share, FAIL);
+ FUNC_ENTER_NOINIT(H5O_share);
/* Check args */
assert (f);
@@ -2423,7 +2468,7 @@ H5O_share (H5F_t *f, const H5O_class_t *type, const void *mesg,
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
if ((type->encode)(f, buf, mesg)<0)
HGOTO_ERROR (H5E_OHDR, H5E_CANTENCODE, FAIL, "unable to encode message");
- if (H5HG_insert (f, size, buf, hobj)<0)
+ if (H5HG_insert (f, dxpl_id, size, buf, hobj)<0)
HGOTO_ERROR (H5E_OHDR, H5E_CANTINIT, FAIL, "unable to store message in global heap");
}
@@ -2433,6 +2478,7 @@ done:
FUNC_LEAVE_NOAPI(ret_value);
}
+#endif /* NOT_YET */
/*-------------------------------------------------------------------------
@@ -2452,7 +2498,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth)
+H5O_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth)
{
H5O_t *oh = NULL;
unsigned i, chunkno;
@@ -2460,8 +2506,8 @@ H5O_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth)
int *sequence;
haddr_t tmp_addr;
herr_t ret_value = FAIL;
- void *(*decode)(H5F_t*, const uint8_t*, H5O_shared_t*);
- herr_t (*debug)(H5F_t*, const void*, FILE*, int, int)=NULL;
+ void *(*decode)(H5F_t*, hid_t, const uint8_t*, H5O_shared_t*);
+ herr_t (*debug)(H5F_t*, hid_t, const void*, FILE*, int, int)=NULL;
FUNC_ENTER_NOAPI(H5O_debug, FAIL);
@@ -2472,7 +2518,7 @@ H5O_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth)
assert(indent >= 0);
assert(fwidth >= 0);
- if (NULL == (oh = H5AC_protect(f, H5AC_OHDR, addr, NULL, NULL)))
+ if (NULL == (oh = H5AC_protect(f, dxpl_id, H5AC_OHDR, addr, NULL, NULL)))
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
/* debug */
@@ -2480,7 +2526,7 @@ H5O_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth)
HDfprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
"Dirty:",
- (int) (oh->dirty));
+ (int) (oh->cache_info.dirty));
HDfprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
"Version:",
(int) (oh->version));
@@ -2576,13 +2622,13 @@ H5O_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth)
debug = oh->mesg[i].type->debug;
}
if (NULL==oh->mesg[i].native && oh->mesg[i].type->decode)
- oh->mesg[i].native = (decode)(f, oh->mesg[i].raw, NULL);
+ oh->mesg[i].native = (decode)(f, dxpl_id, oh->mesg[i].raw, NULL);
if (NULL==oh->mesg[i].native)
debug = NULL;
/* print the message */
if (debug)
- (debug)(f, oh->mesg[i].native, stream, indent+3, MAX(0, fwidth-3));
+ (debug)(f, dxpl_id, oh->mesg[i].native, stream, indent+3, MAX(0, fwidth-3));
else
HDfprintf(stream, "%*sNo info for this message.\n", indent + 3, "");
@@ -2591,14 +2637,14 @@ H5O_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth)
H5O_shared_t *shared = (H5O_shared_t*)(oh->mesg[i].native);
void *mesg = NULL;
if (shared->in_gh) {
- void *p = H5HG_read (f, oh->mesg[i].native, NULL);
- mesg = (oh->mesg[i].type->decode)(f, p, oh->mesg[i].native);
+ void *p = H5HG_read (f, dxpl_id, oh->mesg[i].native, NULL);
+ mesg = (oh->mesg[i].type->decode)(f, dxpl_id, p, oh->mesg[i].native);
H5MM_xfree (p);
} else {
- mesg = H5O_read (&(shared->u.ent), oh->mesg[i].type, 0, NULL);
+ mesg = H5O_read (&(shared->u.ent), oh->mesg[i].type, 0, NULL, dxpl_id);
}
if (oh->mesg[i].type->debug) {
- (oh->mesg[i].type->debug)(f, mesg, stream, indent+3,
+ (oh->mesg[i].type->debug)(f, dxpl_id, mesg, stream, indent+3,
MAX (0, fwidth-3));
}
H5O_free (oh->mesg[i].type, mesg);
@@ -2610,7 +2656,7 @@ H5O_debug(H5F_t *f, haddr_t addr, FILE *stream, int indent, int fwidth)
HDfprintf(stream, "*** TOTAL SIZE DOES NOT MATCH ALLOCATED SIZE!\n");
done:
- if (oh && H5AC_unprotect(f, H5AC_OHDR, addr, oh) < 0 && ret_value>=0)
+ if (oh && H5AC_unprotect(f, dxpl_id, H5AC_OHDR, addr, oh) < 0 && ret_value>=0)
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
FUNC_LEAVE_NOAPI(ret_value);
diff --git a/src/H5Oattr.c b/src/H5Oattr.c
index ae227e3..ddc7cdf 100644
--- a/src/H5Oattr.c
+++ b/src/H5Oattr.c
@@ -28,11 +28,11 @@
/* PRIVATE PROTOTYPES */
static herr_t H5O_attr_encode (H5F_t *f, uint8_t *p, const void *mesg);
-static void *H5O_attr_decode (H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_attr_decode (H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static void *H5O_attr_copy (const void *_mesg, void *_dest);
static size_t H5O_attr_size (H5F_t *f, const void *_mesg);
static herr_t H5O_attr_reset (void *_mesg);
-static herr_t H5O_attr_debug (H5F_t *f, const void *_mesg,
+static herr_t H5O_attr_debug (H5F_t *f, hid_t dxpl_id, const void *_mesg,
FILE * stream, int indent, int fwidth);
/* This message derives from H5O */
@@ -89,7 +89,7 @@ H5FL_EXTERN(H5S_simple_t);
* Added a version number at the beginning.
--------------------------------------------------------------------------*/
static void *
-H5O_attr_decode(H5F_t *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
+H5O_attr_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
{
H5A_t *attr = NULL;
H5S_simple_t *simple; /*simple dimensionality information */
@@ -129,14 +129,14 @@ H5O_attr_decode(H5F_t *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
p += H5O_ALIGN(name_len); /* advance the memory pointer */
/* decode the attribute datatype */
- if((attr->dt=(H5O_DTYPE->decode)(f,p,NULL))==NULL)
+ if((attr->dt=(H5O_DTYPE->decode)(f,dxpl_id,p,NULL))==NULL)
HGOTO_ERROR(H5E_ATTR, H5E_CANTDECODE, NULL, "can't decode attribute datatype");
p += H5O_ALIGN(attr->dt_size);
/* decode the attribute dataspace */
if (NULL==(attr->ds = H5FL_CALLOC(H5S_t)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
- if((simple=(H5O_SDSPACE->decode)(f,p,NULL))!=NULL) {
+ if((simple=(H5O_SDSPACE->decode)(f,dxpl_id,p,NULL))!=NULL) {
hsize_t nelem; /* Number of elements in extent */
unsigned u; /* Local index variable */
@@ -412,7 +412,7 @@ done:
parameter.
--------------------------------------------------------------------------*/
static herr_t
-H5O_attr_debug(H5F_t *f, const void *_mesg, FILE * stream, int indent,
+H5O_attr_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream, int indent,
int fwidth)
{
const H5A_t *mesg = (const H5A_t *)_mesg;
@@ -436,20 +436,20 @@ H5O_attr_debug(H5F_t *f, const void *_mesg, FILE * stream, int indent,
"Opened:",
(unsigned int)mesg->ent_opened);
fprintf(stream, "%*sSymbol table entry...\n", indent, "");
- H5G_ent_debug(f, &(mesg->ent), stream, indent+3, MAX(0, fwidth-3),
+ H5G_ent_debug(f, dxpl_id, &(mesg->ent), stream, indent+3, MAX(0, fwidth-3),
HADDR_UNDEF);
fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
"Data type size:",
(unsigned long)(mesg->dt_size));
fprintf(stream, "%*sData type...\n", indent, "");
- (H5O_DTYPE->debug)(f, mesg->dt, stream, indent+3, MAX(0, fwidth-3));
+ (H5O_DTYPE->debug)(f, dxpl_id, mesg->dt, stream, indent+3, MAX(0, fwidth-3));
fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
"Data space size:",
(unsigned long)(mesg->ds_size));
fprintf(stream, "%*sData space...\n", indent, "");
- H5S_debug(f, mesg->ds, stream, indent+3, MAX(0, fwidth-3));
+ H5S_debug(f, dxpl_id, mesg->ds, stream, indent+3, MAX(0, fwidth-3));
done:
FUNC_LEAVE_NOAPI(ret_value);
diff --git a/src/H5Obogus.c b/src/H5Obogus.c
index b25e006..9609834 100644
--- a/src/H5Obogus.c
+++ b/src/H5Obogus.c
@@ -37,10 +37,10 @@
#define PABLO_MASK H5O_bogus_mask
/* PRIVATE PROTOTYPES */
-static void *H5O_bogus_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_bogus_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_bogus_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static size_t H5O_bogus_size(H5F_t *f, const void *_mesg);
-static herr_t H5O_bogus_debug(H5F_t *f, const void *_mesg, FILE * stream,
+static herr_t H5O_bogus_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
int indent, int fwidth);
/* This message derives from H5O */
@@ -83,7 +83,7 @@ static int interface_initialize_g = 0;
*-------------------------------------------------------------------------
*/
static void *
-H5O_bogus_decode(H5F_t UNUSED *f, const uint8_t *p,
+H5O_bogus_decode(H5F_t UNUSED *f, hid_t dxpl_id, const uint8_t *p,
H5O_shared_t UNUSED *sh)
{
H5O_bogus_t *mesg=NULL;
@@ -198,7 +198,7 @@ H5O_bogus_size(H5F_t UNUSED *f, const void UNUSED *mesg)
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_bogus_debug(H5F_t UNUSED *f, const void *_mesg, FILE *stream,
+H5O_bogus_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
int indent, int fwidth)
{
const H5O_bogus_t *mesg = (const H5O_bogus_t *)_mesg;
diff --git a/src/H5Ocont.c b/src/H5Ocont.c
index 18f5a76..673cc75 100644
--- a/src/H5Ocont.c
+++ b/src/H5Ocont.c
@@ -26,9 +26,9 @@
#define PABLO_MASK H5O_cont_mask
/* PRIVATE PROTOTYPES */
-static void *H5O_cont_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_cont_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_cont_encode(H5F_t *f, uint8_t *p, const void *_mesg);
-static herr_t H5O_cont_debug(H5F_t *f, const void *_mesg, FILE * stream,
+static herr_t H5O_cont_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
int indent, int fwidth);
/* This message derives from H5O */
@@ -69,7 +69,7 @@ static int interface_initialize_g = 0;
*-------------------------------------------------------------------------
*/
static void *
-H5O_cont_decode(H5F_t *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
+H5O_cont_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
{
H5O_cont_t *cont = NULL;
void *ret_value;
@@ -148,7 +148,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_cont_debug(H5F_t UNUSED *f, const void *_mesg, FILE * stream,
+H5O_cont_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
int indent, int fwidth)
{
const H5O_cont_t *cont = (const H5O_cont_t *) _mesg;
diff --git a/src/H5Odtype.c b/src/H5Odtype.c
index aea382d..8ec160e 100644
--- a/src/H5Odtype.c
+++ b/src/H5Odtype.c
@@ -26,7 +26,7 @@
/* PRIVATE PROTOTYPES */
static herr_t H5O_dtype_encode (H5F_t *f, uint8_t *p, const void *mesg);
-static void *H5O_dtype_decode (H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_dtype_decode (H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static void *H5O_dtype_copy (const void *_mesg, void *_dest);
static size_t H5O_dtype_size (H5F_t *f, const void *_mesg);
static herr_t H5O_dtype_reset (void *_mesg);
@@ -35,7 +35,7 @@ static herr_t H5O_dtype_get_share (H5F_t *f, const void *_mesg,
H5O_shared_t *sh);
static herr_t H5O_dtype_set_share (H5F_t *f, void *_mesg,
const H5O_shared_t *sh);
-static herr_t H5O_dtype_debug (H5F_t *f, const void *_mesg,
+static herr_t H5O_dtype_debug (H5F_t *f, hid_t dxpl_id, const void *_mesg,
FILE * stream, int indent, int fwidth);
/* This message derives from H5O */
@@ -783,7 +783,7 @@ done:
function using malloc() and is returned to the caller.
--------------------------------------------------------------------------*/
static void *
-H5O_dtype_decode(H5F_t *f, const uint8_t *p,
+H5O_dtype_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p,
H5O_shared_t UNUSED *sh)
{
H5T_t *dt = NULL;
@@ -1155,7 +1155,7 @@ done:
parameter.
--------------------------------------------------------------------------*/
static herr_t
-H5O_dtype_debug(H5F_t *f, const void *mesg, FILE *stream,
+H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
int indent, int fwidth)
{
const H5T_t *dt = (const H5T_t*)mesg;
@@ -1233,12 +1233,12 @@ H5O_dtype_debug(H5F_t *f, const void *mesg, FILE *stream,
fprintf(stream, "%*s%-*s %lu\n", indent+3, "", MAX(0, fwidth-3),
"Byte offset:",
(unsigned long) (dt->u.compnd.memb[i].offset));
- H5O_dtype_debug(f, dt->u.compnd.memb[i].type, stream,
+ H5O_dtype_debug(f, dxpl_id, dt->u.compnd.memb[i].type, stream,
indent+3, MAX(0, fwidth - 3));
}
} else if (H5T_ENUM==dt->type) {
fprintf(stream, "%*s%s\n", indent, "", "Base type:");
- H5O_dtype_debug(f, dt->parent, stream, indent+3, MAX(0, fwidth-3));
+ H5O_dtype_debug(f, dxpl_id, dt->parent, stream, indent+3, MAX(0, fwidth-3));
fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
"Number of members:",
dt->u.enumer.nmembs);
@@ -1280,7 +1280,7 @@ H5O_dtype_debug(H5F_t *f, const void *mesg, FILE *stream,
}
fprintf (stream, "}\n");
fprintf(stream, "%*s%s\n", indent, "", "Base type:");
- H5O_dtype_debug(f, dt->parent, stream, indent+3, MAX(0, fwidth-3));
+ H5O_dtype_debug(f, dxpl_id, dt->parent, stream, indent+3, MAX(0, fwidth-3));
} else {
switch (dt->u.atomic.order) {
case H5T_ORDER_LE:
diff --git a/src/H5Oefl.c b/src/H5Oefl.c
index 38b2dfb..67202f3 100644
--- a/src/H5Oefl.c
+++ b/src/H5Oefl.c
@@ -17,12 +17,12 @@
#define PABLO_MASK H5O_efl_mask
/* PRIVATE PROTOTYPES */
-static void *H5O_efl_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_efl_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_efl_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static void *H5O_efl_copy(const void *_mesg, void *_dest);
static size_t H5O_efl_size(H5F_t *f, const void *_mesg);
static herr_t H5O_efl_reset(void *_mesg);
-static herr_t H5O_efl_debug(H5F_t *f, const void *_mesg, FILE * stream,
+static herr_t H5O_efl_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
int indent, int fwidth);
/* This message derives from H5O */
@@ -68,7 +68,7 @@ static int interface_initialize_g = 0;
*-------------------------------------------------------------------------
*/
static void *
-H5O_efl_decode(H5F_t *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
+H5O_efl_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
{
H5O_efl_t *mesg = NULL;
int i, version;
@@ -103,7 +103,7 @@ H5O_efl_decode(H5F_t *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
H5F_addr_decode(f, &p, &(mesg->heap_addr));
#ifndef NDEBUG
assert (H5F_addr_defined(mesg->heap_addr));
- s = H5HL_peek (f, mesg->heap_addr, 0);
+ s = H5HL_peek (f, dxpl_id, mesg->heap_addr, 0);
assert (s && !*s);
#endif
@@ -114,7 +114,7 @@ H5O_efl_decode(H5F_t *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
for (i=0; i<mesg->nused; i++) {
/* Name */
H5F_DECODE_LENGTH (f, p, mesg->slot[i].name_offset);
- s = H5HL_peek(f, mesg->heap_addr, mesg->slot[i].name_offset);
+ s = H5HL_peek(f, dxpl_id, mesg->heap_addr, mesg->slot[i].name_offset);
assert (s && *s);
mesg->slot[i].name = H5MM_xstrdup (s);
@@ -582,7 +582,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_efl_debug(H5F_t UNUSED *f, const void *_mesg, FILE * stream,
+H5O_efl_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
int indent, int fwidth)
{
const H5O_efl_t *mesg = (const H5O_efl_t *) _mesg;
diff --git a/src/H5Ofill.c b/src/H5Ofill.c
index dd98dc1..1314433 100644
--- a/src/H5Ofill.c
+++ b/src/H5Ofill.c
@@ -18,22 +18,22 @@
#define PABLO_MASK H5O_fill_mask
-static void *H5O_fill_new_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_fill_new_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_fill_new_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static void *H5O_fill_new_copy(const void *_mesg, void *_dest);
static size_t H5O_fill_new_size(H5F_t *f, const void *_mesg);
static herr_t H5O_fill_new_reset(void *_mesg);
static herr_t H5O_fill_new_free(void *_mesg);
-static herr_t H5O_fill_new_debug(H5F_t *f, const void *_mesg, FILE *stream,
+static herr_t H5O_fill_new_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
int indent, int fwidth);
-static void *H5O_fill_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_fill_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_fill_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static void *H5O_fill_copy(const void *_mesg, void *_dest);
static size_t H5O_fill_size(H5F_t *f, const void *_mesg);
static herr_t H5O_fill_reset(void *_mesg);
static herr_t H5O_fill_free(void *_mesg);
-static herr_t H5O_fill_debug(H5F_t *f, const void *_mesg, FILE *stream,
+static herr_t H5O_fill_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
int indent, int fwidth);
/* This message derives from H5O, for old fill value before version 1.5 */
@@ -100,7 +100,7 @@ H5FL_DEFINE(H5O_fill_t);
*-------------------------------------------------------------------------
*/
static void *
-H5O_fill_new_decode(H5F_t UNUSED *f, const uint8_t *p,
+H5O_fill_new_decode(H5F_t UNUSED *f, hid_t dxpl_id, const uint8_t *p,
H5O_shared_t UNUSED *sh)
{
H5O_fill_new_t *mesg=NULL;
@@ -170,7 +170,7 @@ done:
*-------------------------------------------------------------------------
*/
static void *
-H5O_fill_decode(H5F_t UNUSED *f, const uint8_t *p,
+H5O_fill_decode(H5F_t UNUSED *f, hid_t dxpl_id, const uint8_t *p,
H5O_shared_t UNUSED *sh)
{
H5O_fill_t *mesg=NULL;
@@ -664,7 +664,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_fill_new_debug(H5F_t UNUSED *f, const void *_mesg, FILE *stream,
+H5O_fill_new_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
int indent, int fwidth)
{
const H5O_fill_new_t *mesg = (const H5O_fill_new_t *)_mesg;
@@ -708,7 +708,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_fill_debug(H5F_t UNUSED *f, const void *_mesg, FILE *stream,
+H5O_fill_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
int indent, int fwidth)
{
const H5O_fill_t *mesg = (const H5O_fill_t *)_mesg;
@@ -755,7 +755,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5O_fill_convert(void *_fill, H5T_t *dset_type)
+H5O_fill_convert(void *_fill, H5T_t *dset_type, hid_t dxpl_id)
{
H5O_fill_new_t *fill = _fill;
H5T_path_t *tpath=NULL; /*type conversion info */
@@ -779,7 +779,7 @@ H5O_fill_convert(void *_fill, H5T_t *dset_type)
/*
* Can we convert between source and destination data types?
*/
- if (NULL==(tpath=H5T_path_find(fill->type, dset_type, NULL, NULL))) {
+ if (NULL==(tpath=H5T_path_find(fill->type, dset_type, NULL, NULL, dxpl_id))) {
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
"unable to convert between src and dst data types");
}
@@ -804,7 +804,7 @@ H5O_fill_convert(void *_fill, H5T_t *dset_type)
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
/* Do the conversion */
- if (H5T_convert(tpath, src_id, dst_id, (hsize_t)1, 0, 0, buf, bkg, H5P_DATASET_XFER_DEFAULT)<0)
+ if (H5T_convert(tpath, src_id, dst_id, (hsize_t)1, 0, 0, buf, bkg, dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "data type conversion failed");
/* Update the fill message */
diff --git a/src/H5Ofphdf5.c b/src/H5Ofphdf5.c
index 23c6351..88802ab 100644
--- a/src/H5Ofphdf5.c
+++ b/src/H5Ofphdf5.c
@@ -37,13 +37,13 @@
#define PABLO_MASK H5O_fphdf5_mask
/* local prototypes */
-static void *H5O_fphdf5_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_fphdf5_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_fphdf5_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static size_t H5O_fphdf5_size(H5F_t *f, const void *_mesg);
static herr_t H5O_fphdf5_reset(void *_mesg);
static void *H5O_fphdf5_copy(const void *mesg, void *dest);
static herr_t H5O_fphdf5_free(void *_mesg);
-static herr_t H5O_fphdf5_debug(H5F_t *f, const void *_mesg,
+static herr_t H5O_fphdf5_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg,
FILE *stream, int indent, int fwidth);
/* This message derives from H5O */
@@ -94,7 +94,7 @@ H5FL_ARR_EXTERN(hsize_t);
* Modifications:
*/
static void *
-H5O_fphdf5_decode(H5F_t *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
+H5O_fphdf5_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
{
H5O_fphdf5_t *fmeta = NULL; /* New FPHDF5 metadata structure */
void *ret_value;
@@ -511,7 +511,7 @@ done:
* Modifications:
*/
static herr_t
-H5O_fphdf5_debug(H5F_t UNUSED *f, const void *mesg,
+H5O_fphdf5_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *mesg,
FILE * stream, int indent, int fwidth)
{
const H5O_fphdf5_t *fmeta = (const H5O_fphdf5_t *) mesg;
diff --git a/src/H5Olayout.c b/src/H5Olayout.c
index 96340d1..1b353c1 100644
--- a/src/H5Olayout.c
+++ b/src/H5Olayout.c
@@ -15,13 +15,13 @@
#include "H5Oprivate.h"
/* PRIVATE PROTOTYPES */
-static void *H5O_layout_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_layout_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_layout_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static void *H5O_layout_copy(const void *_mesg, void *_dest);
static size_t H5O_layout_size(H5F_t *f, const void *_mesg);
static herr_t H5O_layout_reset (void *_mesg);
static herr_t H5O_layout_free (void *_mesg);
-static herr_t H5O_layout_debug(H5F_t *f, const void *_mesg, FILE * stream,
+static herr_t H5O_layout_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
int indent, int fwidth);
/* This message derives from H5O */
@@ -78,7 +78,7 @@ H5FL_DEFINE(H5O_layout_t);
*-------------------------------------------------------------------------
*/
static void *
-H5O_layout_decode(H5F_t *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
+H5O_layout_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
{
H5O_layout_t *mesg = NULL;
int version;
@@ -445,7 +445,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_layout_debug(H5F_t UNUSED *f, const void *_mesg, FILE * stream,
+H5O_layout_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
int indent, int fwidth)
{
const H5O_layout_t *mesg = (const H5O_layout_t *) _mesg;
diff --git a/src/H5Omtime.c b/src/H5Omtime.c
index a43c47a..15caf80 100644
--- a/src/H5Omtime.c
+++ b/src/H5Omtime.c
@@ -20,17 +20,17 @@
#define PABLO_MASK H5O_mtime_mask
-static void *H5O_mtime_new_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_mtime_new_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_mtime_new_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static size_t H5O_mtime_new_size(H5F_t *f, const void *_mesg);
-static void *H5O_mtime_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_mtime_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_mtime_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static void *H5O_mtime_copy(const void *_mesg, void *_dest);
static size_t H5O_mtime_size(H5F_t *f, const void *_mesg);
static herr_t H5O_mtime_reset(void *_mesg);
static herr_t H5O_mtime_free(void *_mesg);
-static herr_t H5O_mtime_debug(H5F_t *f, const void *_mesg, FILE *stream,
+static herr_t H5O_mtime_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
int indent, int fwidth);
/* This message derives from H5O */
@@ -99,7 +99,7 @@ H5FL_DEFINE(time_t);
*-------------------------------------------------------------------------
*/
static void *
-H5O_mtime_new_decode(H5F_t UNUSED *f, const uint8_t *p,
+H5O_mtime_new_decode(H5F_t UNUSED *f, hid_t dxpl_id, const uint8_t *p,
H5O_shared_t UNUSED *sh)
{
time_t *mesg, the_time;
@@ -156,7 +156,7 @@ done:
*-------------------------------------------------------------------------
*/
static void *
-H5O_mtime_decode(H5F_t UNUSED *f, const uint8_t *p,
+H5O_mtime_decode(H5F_t UNUSED *f, hid_t dxpl_id, const uint8_t *p,
H5O_shared_t UNUSED *sh)
{
time_t *mesg, the_time;
@@ -537,7 +537,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_mtime_debug(H5F_t UNUSED *f, const void *_mesg, FILE *stream,
+H5O_mtime_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
int indent, int fwidth)
{
const time_t *mesg = (const time_t *)_mesg;
diff --git a/src/H5Oname.c b/src/H5Oname.c
index a74488c..c5c47fb 100644
--- a/src/H5Oname.c
+++ b/src/H5Oname.c
@@ -22,12 +22,12 @@
#define PABLO_MASK H5O_name_mask
/* PRIVATE PROTOTYPES */
-static void *H5O_name_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_name_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_name_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static void *H5O_name_copy(const void *_mesg, void *_dest);
static size_t H5O_name_size(H5F_t *f, const void *_mesg);
static herr_t H5O_name_reset(void *_mesg);
-static herr_t H5O_name_debug(H5F_t *f, const void *_mesg, FILE * stream,
+static herr_t H5O_name_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
int indent, int fwidth);
/* This message derives from H5O */
@@ -70,7 +70,7 @@ static int interface_initialize_g = 0;
*-------------------------------------------------------------------------
*/
static void *
-H5O_name_decode(H5F_t UNUSED *f, const uint8_t *p,
+H5O_name_decode(H5F_t UNUSED *f, hid_t dxpl_id, const uint8_t *p,
H5O_shared_t UNUSED *sh)
{
H5O_name_t *mesg;
@@ -273,7 +273,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_name_debug(H5F_t UNUSED *f, const void *_mesg, FILE *stream,
+H5O_name_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
int indent, int fwidth)
{
const H5O_name_t *mesg = (const H5O_name_t *)_mesg;
diff --git a/src/H5Opline.c b/src/H5Opline.c
index 11be53e..d6284b0 100644
--- a/src/H5Opline.c
+++ b/src/H5Opline.c
@@ -21,12 +21,12 @@ static int interface_initialize_g = 0;
#define H5O_PLINE_VERSION 1
static herr_t H5O_pline_encode (H5F_t *f, uint8_t *p, const void *mesg);
-static void *H5O_pline_decode (H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_pline_decode (H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static void *H5O_pline_copy (const void *_mesg, void *_dest);
static size_t H5O_pline_size (H5F_t *f, const void *_mesg);
static herr_t H5O_pline_reset (void *_mesg);
static herr_t H5O_pline_free (void *_mesg);
-static herr_t H5O_pline_debug (H5F_t *f, const void *_mesg,
+static herr_t H5O_pline_debug (H5F_t *f, hid_t dxpl_id, const void *_mesg,
FILE * stream, int indent, int fwidth);
/* This message derives from H5O */
@@ -67,7 +67,7 @@ H5FL_DEFINE(H5O_pline_t);
*-------------------------------------------------------------------------
*/
static void *
-H5O_pline_decode(H5F_t UNUSED *f, const uint8_t *p,
+H5O_pline_decode(H5F_t UNUSED *f, hid_t dxpl_id, const uint8_t *p,
H5O_shared_t UNUSED *sh)
{
H5O_pline_t *pline = NULL;
@@ -437,7 +437,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_pline_debug (H5F_t UNUSED *f, const void *mesg, FILE *stream,
+H5O_pline_debug (H5F_t UNUSED *f, hid_t dxpl_id, const void *mesg, FILE *stream,
int indent, int fwidth)
{
const H5O_pline_t *pline = (const H5O_pline_t *)mesg;
diff --git a/src/H5Oplist.c b/src/H5Oplist.c
index 8f5fc39..7c36136 100644
--- a/src/H5Oplist.c
+++ b/src/H5Oplist.c
@@ -33,11 +33,11 @@
#define PABLO_MASK H5O_plist_mask
/* local prototypes */
-static void *H5O_plist_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_plist_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_plist_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static size_t H5O_plist_size(H5F_t *f, const void *_mesg);
static herr_t H5O_plist_free(void *_mesg);
-static herr_t H5O_plist_debug(H5F_t *f, const void *_mesg,
+static herr_t H5O_plist_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg,
FILE *stream, int indent, int fwidth);
/* This message derives from H5O */
@@ -131,7 +131,7 @@ H5FL_EXTERN(H5P_genplist_t);
* Modifications:
*/
static void *
-H5O_plist_decode(H5F_t UNUSED *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
+H5O_plist_decode(H5F_t UNUSED *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
{
H5P_genplist_t *new_plist = NULL;
H5P_genclass_t *pclass; /* property list class to modify */
@@ -483,7 +483,7 @@ done:
* Modifications:
*/
static herr_t
-H5O_plist_debug(H5F_t UNUSED *f, const void *mesg, FILE *stream,
+H5O_plist_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *mesg, FILE *stream,
int indent, int fwidth)
{
const H5P_genplist_t *plist = (const H5P_genplist_t *)mesg;
diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h
index c384362..a8a68b8 100644
--- a/src/H5Oprivate.h
+++ b/src/H5Oprivate.h
@@ -84,7 +84,7 @@ typedef struct H5O_class_t {
int id; /*message type ID on disk */
const char *name; /*for debugging */
size_t native_size; /*size of native message */
- void *(*decode)(H5F_t*, const uint8_t*, struct H5O_shared_t*);
+ void *(*decode)(H5F_t*, hid_t, const uint8_t*, struct H5O_shared_t*);
herr_t (*encode)(H5F_t*, uint8_t*, const void*);
void *(*copy)(const void*, void*); /*copy native value */
size_t (*raw_size)(H5F_t*, const void*);/*sizeof raw val */
@@ -92,7 +92,7 @@ typedef struct H5O_class_t {
herr_t (*free)(void *); /*free main data struct */
herr_t (*get_share)(H5F_t*, const void*, struct H5O_shared_t*);
herr_t (*set_share)(H5F_t*, void*, const struct H5O_shared_t*);
- herr_t (*debug)(H5F_t*, const void*, FILE*, int, int);
+ herr_t (*debug)(H5F_t*, hid_t, const void*, FILE*, int, int);
} H5O_class_t;
typedef struct H5O_mesg_t {
@@ -115,7 +115,6 @@ typedef struct H5O_chunk_t {
typedef struct H5O_t {
H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
/* first field in structure */
- hbool_t dirty; /*out of data wrt disk */
int version; /*version number */
int nlink; /*link count */
unsigned nmesgs; /*number of messages */
@@ -358,38 +357,34 @@ typedef struct H5O_fphdf5_t {
#endif /* H5_HAVE_FPHDF5 */
/* General message operators */
-H5_DLL herr_t H5O_create(H5F_t *f, size_t size_hint,
+H5_DLL herr_t H5O_create(H5F_t *f, hid_t dxpl_id, size_t size_hint,
H5G_entry_t *ent/*out*/);
-H5_DLL herr_t H5O_init(H5F_t *f, size_t size_hint,
- H5G_entry_t *ent/*out*/, haddr_t header);
H5_DLL herr_t H5O_open(H5G_entry_t *ent);
H5_DLL herr_t H5O_close(H5G_entry_t *ent);
-H5_DLL int H5O_link(H5G_entry_t *ent, int adjust);
-H5_DLL int H5O_count(H5G_entry_t *ent, const H5O_class_t *type);
+H5_DLL int H5O_link(H5G_entry_t *ent, int adjust, hid_t dxpl_id);
+H5_DLL int H5O_count(H5G_entry_t *ent, const H5O_class_t *type, hid_t dxpl_id);
H5_DLL htri_t H5O_exists(H5G_entry_t *ent, const H5O_class_t *type,
- int sequence);
+ int sequence, hid_t dxpl_id);
H5_DLL void *H5O_read(H5G_entry_t *ent, const H5O_class_t *type,
- int sequence, void *mesg);
+ int sequence, void *mesg, hid_t dxpl_id);
H5_DLL int H5O_modify(H5G_entry_t *ent, const H5O_class_t *type,
- int overwrite, unsigned flags, unsigned update_time, const void *mesg);
-H5_DLL H5O_t * H5O_protect(H5G_entry_t *ent);
-H5_DLL herr_t H5O_unprotect(H5G_entry_t *ent, H5O_t *oh);
-H5_DLL int H5O_append(H5F_t *f, H5O_t *oh, const H5O_class_t *type,
+ int overwrite, unsigned flags, unsigned update_time, const void *mesg, hid_t dxpl_id);
+H5_DLL H5O_t * H5O_protect(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL herr_t H5O_unprotect(H5G_entry_t *ent, H5O_t *oh, hid_t dxpl_id);
+H5_DLL int H5O_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_class_t *type,
unsigned flags, const void *mesg);
-H5_DLL herr_t H5O_touch(H5G_entry_t *ent, hbool_t force);
+H5_DLL herr_t H5O_touch(H5G_entry_t *ent, hbool_t force, hid_t dxpl_id);
H5_DLL herr_t H5O_touch_oh(H5F_t *f, H5O_t *oh, hbool_t force);
#ifdef H5O_ENABLE_BOGUS
-H5_DLL herr_t H5O_bogus(H5G_entry_t *ent);
+H5_DLL herr_t H5O_bogus(H5G_entry_t *ent, hid_t dxpl_id);
H5_DLL herr_t H5O_bogus_oh(H5F_t *f, H5O_t *oh);
#endif /* H5O_ENABLE_BOGUS */
H5_DLL herr_t H5O_remove(H5G_entry_t *ent, const H5O_class_t *type,
- int sequence);
+ int sequence, hid_t dxpl_id);
H5_DLL herr_t H5O_reset(const H5O_class_t *type, void *native);
H5_DLL void *H5O_free(const H5O_class_t *type, void *mesg);
H5_DLL void *H5O_copy(const H5O_class_t *type, const void *mesg, void *dst);
-H5_DLL herr_t H5O_share(H5F_t *f, const H5O_class_t *type, const void *mesg,
- H5HG_t *hobj/*out*/);
-H5_DLL herr_t H5O_debug(H5F_t *f, haddr_t addr, FILE * stream, int indent,
+H5_DLL herr_t H5O_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
int fwidth);
/* Layout operators */
@@ -403,6 +398,6 @@ H5_DLL herr_t H5O_efl_write(H5F_t *f, const H5O_efl_t *efl, haddr_t addr,
size_t size, const uint8_t *buf);
/* Fill value operators */
-H5_DLL herr_t H5O_fill_convert(void *_fill, H5T_t *type);
+H5_DLL herr_t H5O_fill_convert(void *_fill, H5T_t *type, hid_t dxpl_id);
#endif
diff --git a/src/H5Osdspace.c b/src/H5Osdspace.c
index 2be7b2d..ada1850 100644
--- a/src/H5Osdspace.c
+++ b/src/H5Osdspace.c
@@ -25,13 +25,13 @@
#define PABLO_MASK H5O_sdspace_mask
/* PRIVATE PROTOTYPES */
-static void *H5O_sdspace_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_sdspace_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_sdspace_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static void *H5O_sdspace_copy(const void *_mesg, void *_dest);
static size_t H5O_sdspace_size(H5F_t *f, const void *_mesg);
static herr_t H5O_sdspace_reset(void *_mesg);
static herr_t H5O_sdspace_free (void *_mesg);
-static herr_t H5O_sdspace_debug(H5F_t *f, const void *_mesg,
+static herr_t H5O_sdspace_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg,
FILE * stream, int indent, int fwidth);
/* This message derives from H5O */
@@ -90,7 +90,7 @@ H5FL_ARR_EXTERN(hsize_t);
Added a version number and reformatted the message for aligment.
--------------------------------------------------------------------------*/
static void *
-H5O_sdspace_decode(H5F_t *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
+H5O_sdspace_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
{
H5S_simple_t *sdim = NULL;/* New simple dimensionality structure */
void *ret_value;
@@ -414,7 +414,7 @@ done:
parameter.
--------------------------------------------------------------------------*/
static herr_t
-H5O_sdspace_debug(H5F_t UNUSED *f, const void *mesg,
+H5O_sdspace_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *mesg,
FILE * stream, int indent, int fwidth)
{
const H5S_simple_t *sdim = (const H5S_simple_t *) mesg;
diff --git a/src/H5Oshared.c b/src/H5Oshared.c
index ad1fff7..cb68ddb 100644
--- a/src/H5Oshared.c
+++ b/src/H5Oshared.c
@@ -19,10 +19,10 @@
#include "H5MMprivate.h"
#include "H5Oprivate.h"
-static void *H5O_shared_decode (H5F_t*, const uint8_t*, H5O_shared_t *sh);
+static void *H5O_shared_decode (H5F_t*, hid_t dxpl_id, const uint8_t*, H5O_shared_t *sh);
static herr_t H5O_shared_encode (H5F_t*, uint8_t*, const void*);
static size_t H5O_shared_size (H5F_t*, const void*);
-static herr_t H5O_shared_debug (H5F_t*, const void*, FILE*, int, int);
+static herr_t H5O_shared_debug (H5F_t*, hid_t dxpl_id, const void*, FILE*, int, int);
/* This message derives from H5O */
const H5O_class_t H5O_SHARED[1] = {{
@@ -66,7 +66,7 @@ static int interface_initialize_g = 0;
*-------------------------------------------------------------------------
*/
static void *
-H5O_shared_decode (H5F_t *f, const uint8_t *buf, H5O_shared_t UNUSED *sh)
+H5O_shared_decode (H5F_t *f, hid_t dxpl_id, const uint8_t *buf, H5O_shared_t UNUSED *sh)
{
H5O_shared_t *mesg=NULL;
unsigned flags, version;
@@ -217,7 +217,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_shared_debug (H5F_t UNUSED *f, const void *_mesg,
+H5O_shared_debug (H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg,
FILE *stream, int indent, int fwidth)
{
const H5O_shared_t *mesg = (const H5O_shared_t *)_mesg;
@@ -246,7 +246,7 @@ H5O_shared_debug (H5F_t UNUSED *f, const void *_mesg,
HDfprintf (stream, "%*s%-*s %s\n", indent, "", fwidth,
"Sharing method",
"Obj Hdr");
- H5G_ent_debug (f, &(mesg->u.ent), stream, indent, fwidth,
+ H5G_ent_debug (f, dxpl_id, &(mesg->u.ent), stream, indent, fwidth,
HADDR_UNDEF);
}
diff --git a/src/H5Ostab.c b/src/H5Ostab.c
index bcc70fd..24bba2e 100644
--- a/src/H5Ostab.c
+++ b/src/H5Ostab.c
@@ -24,12 +24,12 @@
#define PABLO_MASK H5O_stab_mask
/* PRIVATE PROTOTYPES */
-static void *H5O_stab_decode(H5F_t *f, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_stab_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
static herr_t H5O_stab_encode(H5F_t *f, uint8_t *p, const void *_mesg);
static void *H5O_stab_copy(const void *_mesg, void *_dest);
static size_t H5O_stab_size(H5F_t *f, const void *_mesg);
static herr_t H5O_stab_free (void *_mesg);
-static herr_t H5O_stab_debug(H5F_t *f, const void *_mesg,
+static herr_t H5O_stab_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg,
FILE * stream, int indent, int fwidth);
/* This message derives from H5O */
@@ -75,7 +75,7 @@ H5FL_DEFINE_STATIC(H5O_stab_t);
*-------------------------------------------------------------------------
*/
static void *
-H5O_stab_decode(H5F_t *f, const uint8_t *p, H5O_shared_t UNUSED *sh)
+H5O_stab_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
{
H5O_stab_t *stab=NULL;
void *ret_value; /* Return value */
@@ -315,7 +315,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5O_stab_debug(H5F_t UNUSED *f, const void *_mesg, FILE * stream,
+H5O_stab_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
int indent, int fwidth)
{
const H5O_stab_t *stab = (const H5O_stab_t *) _mesg;
diff --git a/src/H5Pdcpl.c b/src/H5Pdcpl.c
index e299c56..efcd8c6 100644
--- a/src/H5Pdcpl.c
+++ b/src/H5Pdcpl.c
@@ -981,7 +981,7 @@ H5Pget_fill_value(hid_t plist_id, hid_t type_id, void *value/*out*/)
/*
* Can we convert between the source and destination data types?
*/
- if(NULL==(tpath=H5T_path_find(fill.type, type, NULL, NULL)))
+ if(NULL==(tpath=H5T_path_find(fill.type, type, NULL, NULL, H5AC_dxpl_id)))
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert between src and dst data types");
src_id = H5I_register(H5I_DATATYPE, H5T_copy (fill.type, H5T_COPY_TRANSIENT));
if (src_id<0)
@@ -1005,7 +1005,7 @@ H5Pget_fill_value(hid_t plist_id, hid_t type_id, void *value/*out*/)
HDmemcpy(buf, fill.buf, H5T_get_size(fill.type));
/* Do the conversion */
- if (H5T_convert(tpath, src_id, type_id, (hsize_t)1, 0, 0, buf, bkg, H5P_DATASET_XFER_DEFAULT)<0)
+ if (H5T_convert(tpath, src_id, type_id, (hsize_t)1, 0, 0, buf, bkg, H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "data type conversion failed");
if (buf!=value)
HDmemcpy(value, buf, H5T_get_size(type));
diff --git a/src/H5Pfapl.c b/src/H5Pfapl.c
index 4b25846..fae17de 100644
--- a/src/H5Pfapl.c
+++ b/src/H5Pfapl.c
@@ -178,7 +178,7 @@ H5P_set_driver(H5P_genplist_t *plist, hid_t new_driver_id, const void *new_drive
{
hid_t driver_id; /* VFL driver ID */
void *driver_info; /* VFL driver info */
- void *tmp_driver_info; /* Temporary VFL driver info */
+ void *copied_driver_info; /* Temporary VFL driver info */
herr_t ret_value=SUCCEED; /* Return value */
FUNC_ENTER_NOAPI(H5P_set_driver, FAIL);
@@ -230,13 +230,13 @@ H5P_set_driver(H5P_genplist_t *plist, hid_t new_driver_id, const void *new_drive
H5I_inc_ref(new_driver_id);
/* Make a copy of the driver information */
- if((tmp_driver_info = H5FD_dxpl_copy(new_driver_id, new_driver_info))==NULL)
+ if(H5FD_dxpl_copy(new_driver_id, new_driver_info, &copied_driver_info)<0)
HGOTO_ERROR (H5E_DATASET, H5E_CANTCOPY, FAIL, "Can't copy VFL driver");
/* Set the driver info for the property list */
if(H5P_set(plist, H5D_XFER_VFL_ID_NAME, &new_driver_id)<0)
HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, FAIL, "Can't set VFL driver ID");
- if(H5P_set(plist, H5D_XFER_VFL_INFO_NAME, &tmp_driver_info) < 0)
+ if(H5P_set(plist, H5D_XFER_VFL_INFO_NAME, &copied_driver_info) < 0)
HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, FAIL, "Can't set VFL driver info");
} else {
diff --git a/src/H5R.c b/src/H5R.c
index 57fd5b4..64fdb6a 100644
--- a/src/H5R.c
+++ b/src/H5R.c
@@ -35,10 +35,10 @@ static herr_t H5R_init_interface(void);
/* Static functions */
static herr_t H5R_create(void *ref, H5G_entry_t *loc, const char *name,
- H5R_type_t ref_type, H5S_t *space);
-static hid_t H5R_dereference(H5F_t *file, H5R_type_t ref_type, void *_ref);
-static H5S_t * H5R_get_region(H5F_t *file, H5R_type_t ref_type, void *_ref);
-static int H5R_get_obj_type(H5F_t *file, H5R_type_t ref_type, void *_ref);
+ H5R_type_t ref_type, H5S_t *space, hid_t dxpl_id);
+static hid_t H5R_dereference(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref);
+static H5S_t * H5R_get_region(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref);
+static int H5R_get_obj_type(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref);
/*--------------------------------------------------------------------------
@@ -136,7 +136,7 @@ H5R_term_interface(void)
REVISION LOG
--------------------------------------------------------------------------*/
static herr_t
-H5R_create(void *_ref, H5G_entry_t *loc, const char *name, H5R_type_t ref_type, H5S_t *space)
+H5R_create(void *_ref, H5G_entry_t *loc, const char *name, H5R_type_t ref_type, H5S_t *space, hid_t dxpl_id)
{
H5G_stat_t sb; /* Stat buffer for retrieving OID */
herr_t ret_value=SUCCEED; /* Return value */
@@ -148,7 +148,7 @@ H5R_create(void *_ref, H5G_entry_t *loc, const char *name, H5R_type_t ref_type,
assert(name);
assert(ref_type>H5R_BADTYPE || ref_type<H5R_MAXTYPE);
- if (H5G_get_objinfo (loc, name, 0, &sb)<0)
+ if (H5G_get_objinfo (loc, name, 0, &sb, dxpl_id)<0)
HGOTO_ERROR (H5E_REFERENCE, H5E_NOTFOUND, FAIL, "unable to stat object");
switch(ref_type) {
@@ -218,7 +218,7 @@ H5R_create(void *_ref, H5G_entry_t *loc, const char *name, H5R_type_t ref_type,
/* Save the serialized buffer for later */
H5_CHECK_OVERFLOW(buf_size,hssize_t,size_t);
- if(H5HG_insert(loc->file,(size_t)buf_size,buf,&hobjid)<0)
+ if(H5HG_insert(loc->file,dxpl_id,(size_t)buf_size,buf,&hobjid)<0)
HGOTO_ERROR(H5E_REFERENCE, H5E_WRITEERROR, FAIL, "Unable to serialize selection");
/* Serialize the heap ID and index for storage in the file */
@@ -298,7 +298,7 @@ H5Rcreate(void *ref, hid_t loc_id, const char *name, H5R_type_t ref_type, hid_t
HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace");
/* Create reference */
- if ((ret_value=H5R_create(ref,loc,name,ref_type,space))<0)
+ if ((ret_value=H5R_create(ref,loc,name,ref_type,space, H5AC_dxpl_id))<0)
HGOTO_ERROR (H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable to create reference");
done:
@@ -329,7 +329,7 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
static hid_t
-H5R_dereference(H5F_t *file, H5R_type_t ref_type, void *_ref)
+H5R_dereference(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref)
{
H5G_t *group; /* Pointer to group to open */
H5T_t *datatype; /* Pointer to datatype to open */
@@ -375,7 +375,7 @@ H5R_dereference(H5F_t *file, H5R_type_t ref_type, void *_ref)
INT32DECODE(p,hobjid.idx);
/* Get the dataset region from the heap (allocate inside routine) */
- if((buf=H5HG_read(ent.file,&hobjid,NULL))==NULL)
+ if((buf=H5HG_read(ent.file,dxpl_id,&hobjid,NULL))==NULL)
HGOTO_ERROR(H5E_REFERENCE, H5E_READERROR, FAIL, "Unable to read dataset region information");
/* Get the object oid for the dataset */
@@ -398,14 +398,14 @@ H5R_dereference(H5F_t *file, H5R_type_t ref_type, void *_ref)
} /* end switch */
/* Check to make certain that this object hasn't been deleted since the reference was created */
- if(H5O_link(&ent,0)<=0)
+ if(H5O_link(&ent,0,dxpl_id)<=0)
HGOTO_ERROR(H5E_REFERENCE, H5E_LINKCOUNT, FAIL, "dereferencing deleted object");
/* Open the dataset object */
- oid_type=H5G_get_type(&ent);
+ oid_type=H5G_get_type(&ent,dxpl_id);
switch(oid_type) {
case H5G_GROUP:
- if ((group=H5G_open_oid(&ent)) == NULL)
+ if ((group=H5G_open_oid(&ent,dxpl_id)) == NULL)
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "not found");
/* Create an atom for the dataset */
@@ -416,7 +416,7 @@ H5R_dereference(H5F_t *file, H5R_type_t ref_type, void *_ref)
break;
case H5G_TYPE:
- if ((datatype=H5T_open_oid(&ent)) == NULL)
+ if ((datatype=H5T_open_oid(&ent, dxpl_id)) == NULL)
HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, FAIL, "not found");
/* Create an atom for the dataset */
@@ -428,7 +428,7 @@ H5R_dereference(H5F_t *file, H5R_type_t ref_type, void *_ref)
case H5G_DATASET:
/* Open the dataset */
- if ((ret_value=H5D_open(&ent)) < 0)
+ if ((ret_value=H5D_open(&ent,dxpl_id)) < 0)
HGOTO_ERROR(H5E_DATASET, H5E_NOTFOUND, FAIL, "not found");
break;
@@ -485,7 +485,7 @@ H5Rdereference(hid_t id, H5R_type_t ref_type, void *_ref)
file=loc->file;
/* Create reference */
- if ((ret_value=H5R_dereference(file, ref_type, _ref))<0)
+ if ((ret_value=H5R_dereference(file, H5AC_dxpl_id, ref_type, _ref))<0)
HGOTO_ERROR (H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable dereference object");
done:
@@ -516,7 +516,7 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
static H5S_t *
-H5R_get_region(H5F_t *file, H5R_type_t UNUSED ref_type, void *_ref)
+H5R_get_region(H5F_t *file, hid_t dxpl_id, H5R_type_t UNUSED ref_type, void *_ref)
{
H5G_entry_t ent; /* Symbol table entry */
uint8_t *p; /* Pointer to OID to store */
@@ -542,7 +542,7 @@ H5R_get_region(H5F_t *file, H5R_type_t UNUSED ref_type, void *_ref)
INT32DECODE(p,hobjid.idx);
/* Get the dataset region from the heap (allocate inside routine) */
- if((buf=H5HG_read(ent.file,&hobjid,NULL))==NULL)
+ if((buf=H5HG_read(ent.file,dxpl_id,&hobjid,NULL))==NULL)
HGOTO_ERROR(H5E_REFERENCE, H5E_READERROR, NULL, "Unable to read dataset region information");
/* Get the object oid for the dataset */
@@ -550,7 +550,7 @@ H5R_get_region(H5F_t *file, H5R_type_t UNUSED ref_type, void *_ref)
H5F_addr_decode(ent.file,(const uint8_t **)&p,&(ent.header));
/* Open and copy the dataset's dataspace */
- if ((ret_value=H5S_read(&ent)) == NULL)
+ if ((ret_value=H5S_read(&ent, dxpl_id)) == NULL)
HGOTO_ERROR(H5E_DATASPACE, H5E_NOTFOUND, NULL, "not found");
/* Unserialize the selection */
@@ -611,7 +611,7 @@ H5Rget_region(hid_t id, H5R_type_t ref_type, void *_ref)
file=loc->file;
/* Get the dataspace with the correct region selected */
- if ((space=H5R_get_region(file,ref_type,_ref))==NULL)
+ if ((space=H5R_get_region(file,H5AC_dxpl_id,ref_type,_ref))==NULL)
HGOTO_ERROR (H5E_REFERENCE, H5E_CANTCREATE, FAIL, "unable to create dataspace");
/* Atomize */
@@ -751,7 +751,7 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
static int
-H5R_get_obj_type(H5F_t *file, H5R_type_t ref_type, void *_ref)
+H5R_get_obj_type(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref)
{
H5G_entry_t ent; /* Symbol table entry */
uint8_t *p; /* Pointer to OID to store */
@@ -790,7 +790,7 @@ H5R_get_obj_type(H5F_t *file, H5R_type_t ref_type, void *_ref)
INT32DECODE(p,hobjid.idx);
/* Get the dataset region from the heap (allocate inside routine) */
- if((buf=H5HG_read(ent.file,&hobjid,NULL))==NULL)
+ if((buf=H5HG_read(ent.file,dxpl_id,&hobjid,NULL))==NULL)
HGOTO_ERROR(H5E_REFERENCE, H5E_READERROR, H5G_UNKNOWN, "Unable to read dataset region information");
/* Get the object oid for the dataset */
@@ -813,11 +813,11 @@ H5R_get_obj_type(H5F_t *file, H5R_type_t ref_type, void *_ref)
} /* end switch */
/* Check to make certain that this object hasn't been deleted since the reference was created */
- if(H5O_link(&ent,0)<=0)
+ if(H5O_link(&ent,0,dxpl_id)<=0)
HGOTO_ERROR(H5E_REFERENCE, H5E_LINKCOUNT, H5G_UNKNOWN, "dereferencing deleted object");
/* Get the OID type */
- ret_value=H5G_get_type(&ent);
+ ret_value=H5G_get_type(&ent,dxpl_id);
done:
FUNC_LEAVE_NOAPI(ret_value);
@@ -869,7 +869,7 @@ H5Rget_obj_type(hid_t id, H5R_type_t ref_type, void *_ref)
file=loc->file;
/* Get the object information */
- if ((ret_value=H5R_get_obj_type(file,ref_type,_ref))<0)
+ if ((ret_value=H5R_get_obj_type(file,H5AC_dxpl_id,ref_type,_ref))<0)
HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, H5G_UNKNOWN, "unable to determine object type");
done:
diff --git a/src/H5S.c b/src/H5S.c
index 980c87f..d19c71a 100644
--- a/src/H5S.c
+++ b/src/H5S.c
@@ -1075,7 +1075,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5S_modify(H5G_entry_t *ent, const H5S_t *ds, hbool_t update_time)
+H5S_modify(H5G_entry_t *ent, const H5S_t *ds, hbool_t update_time, hid_t dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -1087,7 +1087,7 @@ H5S_modify(H5G_entry_t *ent, const H5S_t *ds, hbool_t update_time)
switch (ds->extent.type) {
case H5S_SCALAR:
case H5S_SIMPLE:
- if (H5O_modify(ent, H5O_SDSPACE, 0, 0, update_time, &(ds->extent.u.simple))<0)
+ if (H5O_modify(ent, H5O_SDSPACE, 0, 0, update_time, &(ds->extent.u.simple), dxpl_id)<0)
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "can't update simple data space message");
break;
@@ -1120,7 +1120,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5S_append(H5F_t *f, H5O_t *oh, const H5S_t *ds)
+H5S_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5S_t *ds)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -1133,7 +1133,7 @@ H5S_append(H5F_t *f, H5O_t *oh, const H5S_t *ds)
switch (ds->extent.type) {
case H5S_SCALAR:
case H5S_SIMPLE:
- if (H5O_append(f, oh, H5O_SDSPACE, 0, &(ds->extent.u.simple))<0)
+ if (H5O_append(f, dxpl_id, oh, H5O_SDSPACE, 0, &(ds->extent.u.simple))<0)
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "can't update simple data space message");
break;
@@ -1169,7 +1169,7 @@ done:
*-------------------------------------------------------------------------
*/
H5S_t *
-H5S_read(H5G_entry_t *ent)
+H5S_read(H5G_entry_t *ent, hid_t dxpl_id)
{
H5S_t *ds = NULL; /* Dataspace to return */
H5S_t *ret_value; /* Return value */
@@ -1182,7 +1182,7 @@ H5S_read(H5G_entry_t *ent)
if (NULL==(ds = H5FL_CALLOC(H5S_t)))
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
- if (H5O_read(ent, H5O_SDSPACE, 0, &(ds->extent.u.simple)) == NULL)
+ if (H5O_read(ent, H5O_SDSPACE, 0, &(ds->extent.u.simple), dxpl_id) == NULL)
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, NULL, "unable to load dataspace info from dataset header");
if(ds->extent.u.simple.rank != 0) {
@@ -2022,7 +2022,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5S_debug(H5F_t *f, const void *_mesg, FILE *stream, int indent, int fwidth)
+H5S_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream, int indent, int fwidth)
{
const H5S_t *mesg = (const H5S_t*)_mesg;
herr_t ret_value=SUCCEED; /* Return value */
@@ -2038,7 +2038,7 @@ H5S_debug(H5F_t *f, const void *_mesg, FILE *stream, int indent, int fwidth)
case H5S_SIMPLE:
fprintf(stream, "%*s%-*s H5S_SIMPLE\n", indent, "", fwidth,
"Space class:");
- (H5O_SDSPACE->debug)(f, &(mesg->extent.u.simple), stream,
+ (H5O_SDSPACE->debug)(f, dxpl_id, &(mesg->extent.u.simple), stream,
indent+3, MAX(0, fwidth-3));
break;
diff --git a/src/H5Sprivate.h b/src/H5Sprivate.h
index 0c267ac..903276a 100644
--- a/src/H5Sprivate.h
+++ b/src/H5Sprivate.h
@@ -151,15 +151,15 @@ H5_DLL int H5S_get_simple_extent_dims(const H5S_t *ds, hsize_t dims[]/*out*/,
H5_DLL herr_t H5S_set_extent_simple (H5S_t *space, unsigned rank, const hsize_t *dims,
const hsize_t *max);
H5_DLL herr_t H5S_modify(struct H5G_entry_t *ent, const H5S_t *space,
- hbool_t update_time);
-H5_DLL herr_t H5S_append(H5F_t *f, H5O_t *oh, const H5S_t *ds);
-H5_DLL H5S_t *H5S_read(struct H5G_entry_t *ent);
+ hbool_t update_time, hid_t dxpl_id);
+H5_DLL herr_t H5S_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5S_t *ds);
+H5_DLL H5S_t *H5S_read(struct H5G_entry_t *ent, hid_t dxpl_id);
H5_DLL int H5S_cmp(const H5S_t *ds1, const H5S_t *ds2);
H5_DLL htri_t H5S_is_simple(const H5S_t *sdim);
H5_DLL herr_t H5S_extent_release(H5S_t *space);
H5_DLL int H5S_extend(H5S_t *space, const hsize_t *size);
H5_DLL int H5S_set_extent(H5S_t *space, const hsize_t *size);
-H5_DLL herr_t H5S_debug(H5F_t *f, const void *_mesg, FILE *stream,
+H5_DLL herr_t H5S_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
int indent, int fwidth);
/* Operations on selections */
diff --git a/src/H5T.c b/src/H5T.c
index 26812b4..80a4831 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -233,7 +233,7 @@ H5FL_DEFINE(H5T_path_t);
/* Static local functions */
static herr_t H5T_register(H5T_pers_t pers, const char *name, H5T_t *src,
- H5T_t *dst, H5T_conv_t func);
+ H5T_t *dst, H5T_conv_t func, hid_t dxpl_id);
static H5T_t * H5T_vlen_create(H5T_t *base);
@@ -1662,23 +1662,23 @@ H5T_init_interface(void)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype");
status = 0;
- status |= H5T_register(H5T_PERS_SOFT, "i_i", fixedpt, fixedpt, H5T_conv_i_i);
- status |= H5T_register(H5T_PERS_SOFT, "f_f", floatpt, floatpt, H5T_conv_f_f);
- status |= H5T_register(H5T_PERS_SOFT, "s_s", string, string, H5T_conv_s_s);
- status |= H5T_register(H5T_PERS_SOFT, "b_b", bitfield, bitfield, H5T_conv_b_b);
- status |= H5T_register(H5T_PERS_SOFT, "ibo", fixedpt, fixedpt, H5T_conv_order);
- status |= H5T_register(H5T_PERS_SOFT, "ibo(opt)", fixedpt, fixedpt, H5T_conv_order_opt);
- status |= H5T_register(H5T_PERS_SOFT, "fbo", floatpt, floatpt, H5T_conv_order);
- status |= H5T_register(H5T_PERS_SOFT, "fbo(opt)", floatpt, floatpt, H5T_conv_order_opt);
- status |= H5T_register(H5T_PERS_SOFT, "struct(no-opt)", compound, compound, H5T_conv_struct);
- status |= H5T_register(H5T_PERS_SOFT, "struct(opt)", compound, compound, H5T_conv_struct_opt);
- status |= H5T_register(H5T_PERS_SOFT, "enum", enum_type, enum_type, H5T_conv_enum);
- status |= H5T_register(H5T_PERS_SOFT, "vlen", vlen, vlen, H5T_conv_vlen);
- status |= H5T_register(H5T_PERS_SOFT, "array", array, array, H5T_conv_array);
+ status |= H5T_register(H5T_PERS_SOFT, "i_i", fixedpt, fixedpt, H5T_conv_i_i, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "f_f", floatpt, floatpt, H5T_conv_f_f, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "s_s", string, string, H5T_conv_s_s, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "b_b", bitfield, bitfield, H5T_conv_b_b, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "ibo", fixedpt, fixedpt, H5T_conv_order, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "ibo(opt)", fixedpt, fixedpt, H5T_conv_order_opt, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "fbo", floatpt, floatpt, H5T_conv_order, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "fbo(opt)", floatpt, floatpt, H5T_conv_order_opt, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "struct(no-opt)", compound, compound, H5T_conv_struct, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "struct(opt)", compound, compound, H5T_conv_struct_opt, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "enum", enum_type, enum_type, H5T_conv_enum, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "vlen", vlen, vlen, H5T_conv_vlen, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_SOFT, "array", array, array, H5T_conv_array, H5AC_dxpl_id);
/* Custom conversion for 32-bit ints to 64-bit floats (undocumented) */
- status |= H5T_register(H5T_PERS_HARD, "u32le_f64le", std_u32le, ieee_f64le, H5T_conv_i32le_f64le);
- status |= H5T_register(H5T_PERS_HARD, "i32le_f64le", std_i32le, ieee_f64le, H5T_conv_i32le_f64le);
+ status |= H5T_register(H5T_PERS_HARD, "u32le_f64le", std_u32le, ieee_f64le, H5T_conv_i32le_f64le, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "i32le_f64le", std_i32le, ieee_f64le, H5T_conv_i32le_f64le, H5AC_dxpl_id);
/*
* Native conversions should be listed last since we can use hardware to
@@ -1689,115 +1689,115 @@ H5T_init_interface(void)
*/
/* floating point */
- status |= H5T_register(H5T_PERS_HARD, "flt_dbl", native_float, native_double, H5T_conv_float_double);
- status |= H5T_register(H5T_PERS_HARD, "dbl_flt", native_double, native_float, H5T_conv_double_float);
+ status |= H5T_register(H5T_PERS_HARD, "flt_dbl", native_float, native_double, H5T_conv_float_double, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "dbl_flt", native_double, native_float, H5T_conv_double_float, H5AC_dxpl_id);
/* from long_long */
- status |= H5T_register(H5T_PERS_HARD, "llong_ullong", native_llong, native_ullong, H5T_conv_llong_ullong);
- status |= H5T_register(H5T_PERS_HARD, "ullong_llong", native_ullong, native_llong, H5T_conv_ullong_llong);
- status |= H5T_register(H5T_PERS_HARD, "llong_long", native_llong, native_long, H5T_conv_llong_long);
- status |= H5T_register(H5T_PERS_HARD, "llong_ulong", native_llong, native_ulong, H5T_conv_llong_ulong);
- status |= H5T_register(H5T_PERS_HARD, "ullong_long", native_ullong, native_long, H5T_conv_ullong_long);
- status |= H5T_register(H5T_PERS_HARD, "ullong_ulong", native_ullong, native_ulong, H5T_conv_ullong_ulong);
- status |= H5T_register(H5T_PERS_HARD, "llong_short", native_llong, native_short, H5T_conv_llong_short);
- status |= H5T_register(H5T_PERS_HARD, "llong_ushort", native_llong, native_ushort, H5T_conv_llong_ushort);
- status |= H5T_register(H5T_PERS_HARD, "ullong_short", native_ullong, native_short, H5T_conv_ullong_short);
- status |= H5T_register(H5T_PERS_HARD, "ullong_ushort", native_ullong, native_ushort, H5T_conv_ullong_ushort);
- status |= H5T_register(H5T_PERS_HARD, "llong_int", native_llong, native_int, H5T_conv_llong_int);
- status |= H5T_register(H5T_PERS_HARD, "llong_uint", native_llong, native_uint, H5T_conv_llong_uint);
- status |= H5T_register(H5T_PERS_HARD, "ullong_int", native_ullong, native_int, H5T_conv_ullong_int);
- status |= H5T_register(H5T_PERS_HARD, "ullong_uint", native_ullong, native_uint, H5T_conv_ullong_uint);
- status |= H5T_register(H5T_PERS_HARD, "llong_schar", native_llong, native_schar, H5T_conv_llong_schar);
- status |= H5T_register(H5T_PERS_HARD, "llong_uchar", native_llong, native_uchar, H5T_conv_llong_uchar);
- status |= H5T_register(H5T_PERS_HARD, "ullong_schar", native_ullong, native_schar, H5T_conv_ullong_schar);
- status |= H5T_register(H5T_PERS_HARD, "ullong_uchar", native_ullong, native_uchar, H5T_conv_ullong_uchar);
+ status |= H5T_register(H5T_PERS_HARD, "llong_ullong", native_llong, native_ullong, H5T_conv_llong_ullong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ullong_llong", native_ullong, native_llong, H5T_conv_ullong_llong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "llong_long", native_llong, native_long, H5T_conv_llong_long, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "llong_ulong", native_llong, native_ulong, H5T_conv_llong_ulong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ullong_long", native_ullong, native_long, H5T_conv_ullong_long, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ullong_ulong", native_ullong, native_ulong, H5T_conv_ullong_ulong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "llong_short", native_llong, native_short, H5T_conv_llong_short, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "llong_ushort", native_llong, native_ushort, H5T_conv_llong_ushort, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ullong_short", native_ullong, native_short, H5T_conv_ullong_short, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ullong_ushort", native_ullong, native_ushort, H5T_conv_ullong_ushort, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "llong_int", native_llong, native_int, H5T_conv_llong_int, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "llong_uint", native_llong, native_uint, H5T_conv_llong_uint, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ullong_int", native_ullong, native_int, H5T_conv_ullong_int, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ullong_uint", native_ullong, native_uint, H5T_conv_ullong_uint, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "llong_schar", native_llong, native_schar, H5T_conv_llong_schar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "llong_uchar", native_llong, native_uchar, H5T_conv_llong_uchar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ullong_schar", native_ullong, native_schar, H5T_conv_ullong_schar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ullong_uchar", native_ullong, native_uchar, H5T_conv_ullong_uchar, H5AC_dxpl_id);
/* From long */
- status |= H5T_register(H5T_PERS_HARD, "long_llong", native_long, native_llong, H5T_conv_long_llong);
- status |= H5T_register(H5T_PERS_HARD, "long_ullong", native_long, native_ullong, H5T_conv_long_ullong);
- status |= H5T_register(H5T_PERS_HARD, "ulong_llong", native_ulong, native_llong, H5T_conv_ulong_llong);
- status |= H5T_register(H5T_PERS_HARD, "ulong_ullong", native_ulong, native_ullong, H5T_conv_ulong_ullong);
- status |= H5T_register(H5T_PERS_HARD, "long_ulong", native_long, native_ulong, H5T_conv_long_ulong);
- status |= H5T_register(H5T_PERS_HARD, "ulong_long", native_ulong, native_long, H5T_conv_ulong_long);
- status |= H5T_register(H5T_PERS_HARD, "long_short", native_long, native_short, H5T_conv_long_short);
- status |= H5T_register(H5T_PERS_HARD, "long_ushort", native_long, native_ushort, H5T_conv_long_ushort);
- status |= H5T_register(H5T_PERS_HARD, "ulong_short", native_ulong, native_short, H5T_conv_ulong_short);
- status |= H5T_register(H5T_PERS_HARD, "ulong_ushort", native_ulong, native_ushort, H5T_conv_ulong_ushort);
- status |= H5T_register(H5T_PERS_HARD, "long_int", native_long, native_int, H5T_conv_long_int);
- status |= H5T_register(H5T_PERS_HARD, "long_uint", native_long, native_uint, H5T_conv_long_uint);
- status |= H5T_register(H5T_PERS_HARD, "ulong_int", native_ulong, native_int, H5T_conv_ulong_int);
- status |= H5T_register(H5T_PERS_HARD, "ulong_uint", native_ulong, native_uint, H5T_conv_ulong_uint);
- status |= H5T_register(H5T_PERS_HARD, "long_schar", native_long, native_schar, H5T_conv_long_schar);
- status |= H5T_register(H5T_PERS_HARD, "long_uchar", native_long, native_uchar, H5T_conv_long_uchar);
- status |= H5T_register(H5T_PERS_HARD, "ulong_schar", native_ulong, native_schar, H5T_conv_ulong_schar);
- status |= H5T_register(H5T_PERS_HARD, "ulong_uchar", native_ulong, native_uchar, H5T_conv_ulong_uchar);
+ status |= H5T_register(H5T_PERS_HARD, "long_llong", native_long, native_llong, H5T_conv_long_llong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "long_ullong", native_long, native_ullong, H5T_conv_long_ullong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ulong_llong", native_ulong, native_llong, H5T_conv_ulong_llong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ulong_ullong", native_ulong, native_ullong, H5T_conv_ulong_ullong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "long_ulong", native_long, native_ulong, H5T_conv_long_ulong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ulong_long", native_ulong, native_long, H5T_conv_ulong_long, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "long_short", native_long, native_short, H5T_conv_long_short, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "long_ushort", native_long, native_ushort, H5T_conv_long_ushort, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ulong_short", native_ulong, native_short, H5T_conv_ulong_short, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ulong_ushort", native_ulong, native_ushort, H5T_conv_ulong_ushort, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "long_int", native_long, native_int, H5T_conv_long_int, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "long_uint", native_long, native_uint, H5T_conv_long_uint, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ulong_int", native_ulong, native_int, H5T_conv_ulong_int, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ulong_uint", native_ulong, native_uint, H5T_conv_ulong_uint, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "long_schar", native_long, native_schar, H5T_conv_long_schar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "long_uchar", native_long, native_uchar, H5T_conv_long_uchar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ulong_schar", native_ulong, native_schar, H5T_conv_ulong_schar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ulong_uchar", native_ulong, native_uchar, H5T_conv_ulong_uchar, H5AC_dxpl_id);
/* From short */
- status |= H5T_register(H5T_PERS_HARD, "short_llong", native_short, native_llong, H5T_conv_short_llong);
- status |= H5T_register(H5T_PERS_HARD, "short_ullong", native_short, native_ullong, H5T_conv_short_ullong);
- status |= H5T_register(H5T_PERS_HARD, "ushort_llong", native_ushort, native_llong, H5T_conv_ushort_llong);
- status |= H5T_register(H5T_PERS_HARD, "ushort_ullong", native_ushort, native_ullong, H5T_conv_ushort_ullong);
- status |= H5T_register(H5T_PERS_HARD, "short_long", native_short, native_long, H5T_conv_short_long);
- status |= H5T_register(H5T_PERS_HARD, "short_ulong", native_short, native_ulong, H5T_conv_short_ulong);
- status |= H5T_register(H5T_PERS_HARD, "ushort_long", native_ushort, native_long, H5T_conv_ushort_long);
- status |= H5T_register(H5T_PERS_HARD, "ushort_ulong", native_ushort, native_ulong, H5T_conv_ushort_ulong);
- status |= H5T_register(H5T_PERS_HARD, "short_ushort", native_short, native_ushort, H5T_conv_short_ushort);
- status |= H5T_register(H5T_PERS_HARD, "ushort_short", native_ushort, native_short, H5T_conv_ushort_short);
- status |= H5T_register(H5T_PERS_HARD, "short_int", native_short, native_int, H5T_conv_short_int);
- status |= H5T_register(H5T_PERS_HARD, "short_uint", native_short, native_uint, H5T_conv_short_uint);
- status |= H5T_register(H5T_PERS_HARD, "ushort_int", native_ushort, native_int, H5T_conv_ushort_int);
- status |= H5T_register(H5T_PERS_HARD, "ushort_uint", native_ushort, native_uint, H5T_conv_ushort_uint);
- status |= H5T_register(H5T_PERS_HARD, "short_schar", native_short, native_schar, H5T_conv_short_schar);
- status |= H5T_register(H5T_PERS_HARD, "short_uchar", native_short, native_uchar, H5T_conv_short_uchar);
- status |= H5T_register(H5T_PERS_HARD, "ushort_schar", native_ushort, native_schar, H5T_conv_ushort_schar);
- status |= H5T_register(H5T_PERS_HARD, "ushort_uchar", native_ushort, native_uchar, H5T_conv_ushort_uchar);
+ status |= H5T_register(H5T_PERS_HARD, "short_llong", native_short, native_llong, H5T_conv_short_llong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "short_ullong", native_short, native_ullong, H5T_conv_short_ullong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ushort_llong", native_ushort, native_llong, H5T_conv_ushort_llong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ushort_ullong", native_ushort, native_ullong, H5T_conv_ushort_ullong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "short_long", native_short, native_long, H5T_conv_short_long, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "short_ulong", native_short, native_ulong, H5T_conv_short_ulong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ushort_long", native_ushort, native_long, H5T_conv_ushort_long, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ushort_ulong", native_ushort, native_ulong, H5T_conv_ushort_ulong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "short_ushort", native_short, native_ushort, H5T_conv_short_ushort, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ushort_short", native_ushort, native_short, H5T_conv_ushort_short, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "short_int", native_short, native_int, H5T_conv_short_int, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "short_uint", native_short, native_uint, H5T_conv_short_uint, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ushort_int", native_ushort, native_int, H5T_conv_ushort_int, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ushort_uint", native_ushort, native_uint, H5T_conv_ushort_uint, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "short_schar", native_short, native_schar, H5T_conv_short_schar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "short_uchar", native_short, native_uchar, H5T_conv_short_uchar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ushort_schar", native_ushort, native_schar, H5T_conv_ushort_schar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "ushort_uchar", native_ushort, native_uchar, H5T_conv_ushort_uchar, H5AC_dxpl_id);
/* From int */
- status |= H5T_register(H5T_PERS_HARD, "int_llong", native_int, native_llong, H5T_conv_int_llong);
- status |= H5T_register(H5T_PERS_HARD, "int_ullong", native_int, native_ullong, H5T_conv_int_ullong);
- status |= H5T_register(H5T_PERS_HARD, "uint_llong", native_uint, native_llong, H5T_conv_uint_llong);
- status |= H5T_register(H5T_PERS_HARD, "uint_ullong", native_uint, native_ullong, H5T_conv_uint_ullong);
- status |= H5T_register(H5T_PERS_HARD, "int_long", native_int, native_long, H5T_conv_int_long);
- status |= H5T_register(H5T_PERS_HARD, "int_ulong", native_int, native_ulong, H5T_conv_int_ulong);
- status |= H5T_register(H5T_PERS_HARD, "uint_long", native_uint, native_long, H5T_conv_uint_long);
- status |= H5T_register(H5T_PERS_HARD, "uint_ulong", native_uint, native_ulong, H5T_conv_uint_ulong);
- status |= H5T_register(H5T_PERS_HARD, "int_short", native_int, native_short, H5T_conv_int_short);
- status |= H5T_register(H5T_PERS_HARD, "int_ushort", native_int, native_ushort, H5T_conv_int_ushort);
- status |= H5T_register(H5T_PERS_HARD, "uint_short", native_uint, native_short, H5T_conv_uint_short);
- status |= H5T_register(H5T_PERS_HARD, "uint_ushort", native_uint, native_ushort, H5T_conv_uint_ushort);
- status |= H5T_register(H5T_PERS_HARD, "int_uint", native_int, native_uint, H5T_conv_int_uint);
- status |= H5T_register(H5T_PERS_HARD, "uint_int", native_uint, native_int, H5T_conv_uint_int);
- status |= H5T_register(H5T_PERS_HARD, "int_schar", native_int, native_schar, H5T_conv_int_schar);
- status |= H5T_register(H5T_PERS_HARD, "int_uchar", native_int, native_uchar, H5T_conv_int_uchar);
- status |= H5T_register(H5T_PERS_HARD, "uint_schar", native_uint, native_schar, H5T_conv_uint_schar);
- status |= H5T_register(H5T_PERS_HARD, "uint_uchar", native_uint, native_uchar, H5T_conv_uint_uchar);
+ status |= H5T_register(H5T_PERS_HARD, "int_llong", native_int, native_llong, H5T_conv_int_llong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "int_ullong", native_int, native_ullong, H5T_conv_int_ullong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uint_llong", native_uint, native_llong, H5T_conv_uint_llong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uint_ullong", native_uint, native_ullong, H5T_conv_uint_ullong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "int_long", native_int, native_long, H5T_conv_int_long, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "int_ulong", native_int, native_ulong, H5T_conv_int_ulong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uint_long", native_uint, native_long, H5T_conv_uint_long, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uint_ulong", native_uint, native_ulong, H5T_conv_uint_ulong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "int_short", native_int, native_short, H5T_conv_int_short, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "int_ushort", native_int, native_ushort, H5T_conv_int_ushort, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uint_short", native_uint, native_short, H5T_conv_uint_short, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uint_ushort", native_uint, native_ushort, H5T_conv_uint_ushort, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "int_uint", native_int, native_uint, H5T_conv_int_uint, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uint_int", native_uint, native_int, H5T_conv_uint_int, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "int_schar", native_int, native_schar, H5T_conv_int_schar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "int_uchar", native_int, native_uchar, H5T_conv_int_uchar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uint_schar", native_uint, native_schar, H5T_conv_uint_schar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uint_uchar", native_uint, native_uchar, H5T_conv_uint_uchar, H5AC_dxpl_id);
/* From char */
- status |= H5T_register(H5T_PERS_HARD, "schar_llong", native_schar, native_llong, H5T_conv_schar_llong);
- status |= H5T_register(H5T_PERS_HARD, "schar_ullong", native_schar, native_ullong, H5T_conv_schar_ullong);
- status |= H5T_register(H5T_PERS_HARD, "uchar_llong", native_uchar, native_llong, H5T_conv_uchar_llong);
- status |= H5T_register(H5T_PERS_HARD, "uchar_ullong", native_uchar, native_ullong, H5T_conv_uchar_ullong);
- status |= H5T_register(H5T_PERS_HARD, "schar_long", native_schar, native_long, H5T_conv_schar_long);
- status |= H5T_register(H5T_PERS_HARD, "schar_ulong", native_schar, native_ulong, H5T_conv_schar_ulong);
- status |= H5T_register(H5T_PERS_HARD, "uchar_long", native_uchar, native_long, H5T_conv_uchar_long);
- status |= H5T_register(H5T_PERS_HARD, "uchar_ulong", native_uchar, native_ulong, H5T_conv_uchar_ulong);
- status |= H5T_register(H5T_PERS_HARD, "schar_short", native_schar, native_short, H5T_conv_schar_short);
- status |= H5T_register(H5T_PERS_HARD, "schar_ushort", native_schar, native_ushort, H5T_conv_schar_ushort);
- status |= H5T_register(H5T_PERS_HARD, "uchar_short", native_uchar, native_short, H5T_conv_uchar_short);
- status |= H5T_register(H5T_PERS_HARD, "uchar_ushort", native_uchar, native_ushort, H5T_conv_uchar_ushort);
- status |= H5T_register(H5T_PERS_HARD, "schar_int", native_schar, native_int, H5T_conv_schar_int);
- status |= H5T_register(H5T_PERS_HARD, "schar_uint", native_schar, native_uint, H5T_conv_schar_uint);
- status |= H5T_register(H5T_PERS_HARD, "uchar_int", native_uchar, native_int, H5T_conv_uchar_int);
- status |= H5T_register(H5T_PERS_HARD, "uchar_uint", native_uchar, native_uint, H5T_conv_uchar_uint);
- status |= H5T_register(H5T_PERS_HARD, "schar_uchar", native_schar, native_uchar, H5T_conv_schar_uchar);
- status |= H5T_register(H5T_PERS_HARD, "uchar_schar", native_uchar, native_schar, H5T_conv_uchar_schar);
+ status |= H5T_register(H5T_PERS_HARD, "schar_llong", native_schar, native_llong, H5T_conv_schar_llong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "schar_ullong", native_schar, native_ullong, H5T_conv_schar_ullong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uchar_llong", native_uchar, native_llong, H5T_conv_uchar_llong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uchar_ullong", native_uchar, native_ullong, H5T_conv_uchar_ullong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "schar_long", native_schar, native_long, H5T_conv_schar_long, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "schar_ulong", native_schar, native_ulong, H5T_conv_schar_ulong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uchar_long", native_uchar, native_long, H5T_conv_uchar_long, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uchar_ulong", native_uchar, native_ulong, H5T_conv_uchar_ulong, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "schar_short", native_schar, native_short, H5T_conv_schar_short, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "schar_ushort", native_schar, native_ushort, H5T_conv_schar_ushort, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uchar_short", native_uchar, native_short, H5T_conv_uchar_short, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uchar_ushort", native_uchar, native_ushort, H5T_conv_uchar_ushort, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "schar_int", native_schar, native_int, H5T_conv_schar_int, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "schar_uint", native_schar, native_uint, H5T_conv_schar_uint, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uchar_int", native_uchar, native_int, H5T_conv_uchar_int, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uchar_uint", native_uchar, native_uint, H5T_conv_uchar_uint, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "schar_uchar", native_schar, native_uchar, H5T_conv_schar_uchar, H5AC_dxpl_id);
+ status |= H5T_register(H5T_PERS_HARD, "uchar_schar", native_uchar, native_schar, H5T_conv_uchar_schar, H5AC_dxpl_id);
/*
* The special no-op conversion is the fastest, so we list it last. The
* data types we use are not important as long as the source and
* destination are equal.
*/
- status |= H5T_register(H5T_PERS_HARD, "no-op", native_int, native_int, H5T_conv_noop);
+ status |= H5T_register(H5T_PERS_HARD, "no-op", native_int, native_int, H5T_conv_noop, H5AC_dxpl_id);
if (status<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to register conversion function(s)");
@@ -1897,7 +1897,7 @@ H5T_term_interface(void)
H5T_print_stats(path, &nprint/*in,out*/);
path->cdata.command = H5T_CONV_FREE;
if ((path->func)(FAIL, FAIL, &(path->cdata),
- (hsize_t)0, 0, 0, NULL, NULL,H5P_DATASET_XFER_DEFAULT)<0) {
+ (hsize_t)0, 0, 0, NULL, NULL,H5AC_dxpl_id)<0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
fprintf (H5DEBUG(T), "H5T: conversion function "
@@ -2108,7 +2108,7 @@ H5Topen(hid_t loc_id, const char *name)
HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no name");
/* Open it */
- if (NULL==(type=H5T_open (loc, name)))
+ if (NULL==(type=H5T_open (loc, name, H5AC_dxpl_id)))
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTOPENOBJ, FAIL, "unable to open named data type");
/* Register the type and return the ID */
@@ -2159,7 +2159,7 @@ H5Tcommit(hid_t loc_id, const char *name, hid_t type_id)
HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
/* Commit the type */
- if (H5T_commit (loc, name, type)<0)
+ if (H5T_commit (loc, name, type, H5AC_dxpl_id)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to commit data type");
done:
@@ -5722,7 +5722,7 @@ done:
*/
static herr_t
H5T_register(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst,
- H5T_conv_t func)
+ H5T_conv_t func, hid_t dxpl_id)
{
hid_t tmp_sid=-1, tmp_did=-1;/*temporary data type IDs */
H5T_path_t *old_path=NULL; /*existing conversion path */
@@ -5743,7 +5743,7 @@ H5T_register(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst,
if (H5T_PERS_HARD==pers) {
/* Locate or create a new conversion path */
- if (NULL==(new_path=H5T_path_find(src, dst, name, func)))
+ if (NULL==(new_path=H5T_path_find(src, dst, name, func, dxpl_id)))
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to locate/allocate conversion path");
/*
@@ -5796,7 +5796,7 @@ H5T_register(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst,
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register data types for conv query");
HDmemset(&cdata, 0, sizeof cdata);
cdata.command = H5T_CONV_INIT;
- if ((func)(tmp_sid, tmp_did, &cdata, (hsize_t)0, 0, 0, NULL, NULL, H5P_DATASET_XFER_DEFAULT)<0) {
+ if ((func)(tmp_sid, tmp_did, &cdata, (hsize_t)0, 0, 0, NULL, NULL, dxpl_id)<0) {
H5I_dec_ref(tmp_sid);
H5I_dec_ref(tmp_did);
tmp_sid = tmp_did = -1;
@@ -5823,7 +5823,7 @@ H5T_register(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst,
/* Free old path */
H5T_print_stats(old_path, &nprint);
old_path->cdata.command = H5T_CONV_FREE;
- if ((old_path->func)(tmp_sid, tmp_did, &(old_path->cdata), (hsize_t)0, 0, 0, NULL, NULL, H5P_DATASET_XFER_DEFAULT)<0) {
+ if ((old_path->func)(tmp_sid, tmp_did, &(old_path->cdata), (hsize_t)0, 0, 0, NULL, NULL, dxpl_id)<0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
fprintf (H5DEBUG(T), "H5T: conversion function 0x%08lx "
@@ -5910,7 +5910,7 @@ H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id,
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no conversion function specified");
/* Go register the function */
- if(H5T_register(pers,name,src,dst,func)<0)
+ if(H5T_register(pers,name,src,dst,func,H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register conversion function");
done:
@@ -5939,7 +5939,7 @@ done:
*/
herr_t
H5T_unregister(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst,
- H5T_conv_t func)
+ H5T_conv_t func, hid_t dxpl_id)
{
H5T_path_t *path = NULL; /*conversion path */
H5T_soft_t *soft = NULL; /*soft conversion information */
@@ -5985,7 +5985,7 @@ H5T_unregister(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst,
H5T_print_stats(path, &nprint);
path->cdata.command = H5T_CONV_FREE;
if ((path->func)(FAIL, FAIL, &(path->cdata), (hsize_t)0, 0, 0, NULL, NULL,
- H5P_DATASET_XFER_DEFAULT)<0) {
+ dxpl_id)<0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
fprintf(H5DEBUG(T), "H5T: conversion function 0x%08lx failed "
@@ -6040,7 +6040,7 @@ H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id,
if (dst_id>0 && (NULL==(dst=H5I_object_verify(dst_id,H5I_DATATYPE))))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "dst is not a data type");
- if (H5T_unregister(pers,name,src,dst,func)<0)
+ if (H5T_unregister(pers,name,src,dst,func,H5AC_dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDELETE, FAIL, "internal unregister function failed");
done:
@@ -6086,7 +6086,7 @@ H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata)
HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, NULL, "no address to receive cdata pointer");
/* Find it */
- if (NULL==(path=H5T_path_find(src, dst, NULL, NULL)))
+ if (NULL==(path=H5T_path_find(src, dst, NULL, NULL, H5AC_dxpl_id)))
HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL, "conversion function not found");
if (pcdata)
@@ -6129,30 +6129,30 @@ done:
*/
herr_t
H5Tconvert(hid_t src_id, hid_t dst_id, hsize_t nelmts, void *buf,
- void *background, hid_t plist_id)
+ void *background, hid_t dxpl_id)
{
H5T_path_t *tpath=NULL; /*type conversion info */
H5T_t *src=NULL, *dst=NULL; /*unatomized types */
herr_t ret_value=SUCCEED; /* Return value */
FUNC_ENTER_API(H5Tconvert, FAIL);
- H5TRACE6("e","iihxxi",src_id,dst_id,nelmts,buf,background,plist_id);
+ H5TRACE6("e","iihxxi",src_id,dst_id,nelmts,buf,background,dxpl_id);
/* Check args */
if (NULL==(src=H5I_object_verify(src_id,H5I_DATATYPE)) ||
NULL==(dst=H5I_object_verify(dst_id,H5I_DATATYPE)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
- if(H5P_DEFAULT == plist_id)
- plist_id = H5P_DATASET_XFER_DEFAULT;
+ if(H5P_DEFAULT == dxpl_id)
+ dxpl_id = H5P_DATASET_XFER_DEFAULT;
else
- if(TRUE != H5P_isa_class(plist_id, H5P_DATASET_XFER))
+ if(TRUE != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not dataset transfer property list");
/* Find the conversion function */
- if (NULL==(tpath=H5T_path_find(src, dst, NULL, NULL)))
+ if (NULL==(tpath=H5T_path_find(src, dst, NULL, NULL, dxpl_id)))
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert between src and dst data types");
- if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, 0, buf, background, plist_id)<0)
+ if (H5T_convert(tpath, src_id, dst_id, nelmts, 0, 0, buf, background, dxpl_id)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "data type conversion failed");
done:
@@ -6347,14 +6347,14 @@ done:
*-------------------------------------------------------------------------
*/
htri_t
-H5T_isa(H5G_entry_t *ent)
+H5T_isa(H5G_entry_t *ent, hid_t dxpl_id)
{
htri_t ret_value;
FUNC_ENTER_NOAPI(H5T_isa, FAIL);
assert(ent);
- if ((ret_value=H5O_exists(ent, H5O_DTYPE, 0))<0)
+ if ((ret_value=H5O_exists(ent, H5O_DTYPE, 0, dxpl_id))<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to read object header");
done:
@@ -6380,7 +6380,7 @@ done:
*-------------------------------------------------------------------------
*/
H5T_t *
-H5T_open (H5G_entry_t *loc, const char *name)
+H5T_open (H5G_entry_t *loc, const char *name, hid_t dxpl_id)
{
H5T_t *dt;
H5G_entry_t ent;
@@ -6395,11 +6395,11 @@ H5T_open (H5G_entry_t *loc, const char *name)
* Find the named data type object header and read the data type message
* from it.
*/
- if (H5G_find (loc, name, NULL, &ent/*out*/)<0)
+ if (H5G_find (loc, name, NULL, &ent/*out*/, dxpl_id)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_NOTFOUND, NULL, "not found");
/* Open the datatype object */
- if ((dt=H5T_open_oid(&ent)) ==NULL)
+ if ((dt=H5T_open_oid(&ent, dxpl_id)) ==NULL)
HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL, "not found");
/* Set return value */
@@ -6427,7 +6427,7 @@ done:
*-------------------------------------------------------------------------
*/
H5T_t *
-H5T_open_oid (H5G_entry_t *ent)
+H5T_open_oid (H5G_entry_t *ent, hid_t dxpl_id)
{
H5T_t *dt=NULL;
H5T_t *ret_value;
@@ -6438,7 +6438,7 @@ H5T_open_oid (H5G_entry_t *ent)
if (H5O_open (ent)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTOPENOBJ, NULL, "unable to open named data type");
- if (NULL==(dt=H5O_read (ent, H5O_DTYPE, 0, NULL)))
+ if (NULL==(dt=H5O_read (ent, H5O_DTYPE, 0, NULL, dxpl_id)))
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to load type message from object header");
/* Mark the type as named and open */
@@ -6693,7 +6693,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5T_commit (H5G_entry_t *loc, const char *name, H5T_t *type)
+H5T_commit (H5G_entry_t *loc, const char *name, H5T_t *type, hid_t dxpl_id)
{
H5F_t *file = NULL;
herr_t ret_value=SUCCEED; /* Return value */
@@ -6719,18 +6719,18 @@ H5T_commit (H5G_entry_t *loc, const char *name, H5T_t *type)
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "datatype is not sensible");
/* Find the insertion file */
- if (NULL==(file=H5G_insertion_file(loc, name)))
+ if (NULL==(file=H5G_insertion_file(loc, name, dxpl_id)))
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to find insertion point");
/*
* Create the object header and open it for write access. Insert the data
* type message and then give the object header a name.
*/
- if (H5O_create (file, 64, &(type->ent))<0)
+ if (H5O_create (file, dxpl_id, 64, &(type->ent))<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to create data type object header");
- if (H5O_modify (&(type->ent), H5O_DTYPE, 0, H5O_FLAG_CONSTANT, 1, type)<0)
+ if (H5O_modify (&(type->ent), H5O_DTYPE, 0, H5O_FLAG_CONSTANT, 1, type, dxpl_id)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to update type header message");
- if (H5G_insert (loc, name, &(type->ent))<0)
+ if (H5G_insert (loc, name, &(type->ent), dxpl_id)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to name data type");
type->state = H5T_STATE_OPEN;
@@ -8280,7 +8280,7 @@ done:
*/
H5T_path_t *
H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
- H5T_conv_t func)
+ H5T_conv_t func, hid_t dxpl_id)
{
int lt, rt; /*left and right edges */
int md; /*middle */
@@ -8310,7 +8310,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
H5T_g.path[0]->func = H5T_conv_noop;
H5T_g.path[0]->cdata.command = H5T_CONV_INIT;
if (H5T_conv_noop(FAIL, FAIL, &(H5T_g.path[0]->cdata), (hsize_t)0, 0, 0,
- NULL, NULL, H5P_DATASET_XFER_DEFAULT)<0) {
+ NULL, NULL, dxpl_id)<0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
fprintf(H5DEBUG(T), "H5T: unable to initialize no-op "
@@ -8397,7 +8397,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register destination conversion type for query");
path->cdata.command = H5T_CONV_INIT;
if ((func)(src_id, dst_id, &(path->cdata), (hsize_t)0, 0, 0, NULL, NULL,
- H5P_DATASET_XFER_DEFAULT)<0)
+ dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to initialize conversion function");
if (src_id>=0) H5I_dec_ref(src_id);
if (dst_id>=0) H5I_dec_ref(dst_id);
@@ -8425,7 +8425,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register conversion types for query");
path->cdata.command = H5T_CONV_INIT;
if ((H5T_g.soft[i].func) (src_id, dst_id, &(path->cdata),
- (hsize_t)0, 0, 0, NULL, NULL, H5P_DATASET_XFER_DEFAULT)<0) {
+ (hsize_t)0, 0, 0, NULL, NULL, dxpl_id)<0) {
HDmemset (&(path->cdata), 0, sizeof(H5T_cdata_t));
H5E_clear(); /*ignore the error*/
} else {
@@ -8469,7 +8469,7 @@ H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
H5T_print_stats(table, &nprint/*in,out*/);
table->cdata.command = H5T_CONV_FREE;
if ((table->func)(FAIL, FAIL, &(table->cdata), (hsize_t)0, 0, 0, NULL, NULL,
- H5P_DATASET_XFER_DEFAULT)<0) {
+ dxpl_id)<0) {
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
fprintf(H5DEBUG(T), "H5T: conversion function 0x%08lx free "
diff --git a/src/H5Tconv.c b/src/H5Tconv.c
index a6f8dbb..c2a9691 100644
--- a/src/H5Tconv.c
+++ b/src/H5Tconv.c
@@ -426,7 +426,7 @@ herr_t
H5T_conv_noop(hid_t UNUSED src_id, hid_t UNUSED dst_id, H5T_cdata_t *cdata,
hsize_t UNUSED nelmts, size_t UNUSED buf_stride,
size_t UNUSED bkg_stride, void UNUSED *buf,
- void UNUSED *background, hid_t UNUSED dset_xfer_plist)
+ void UNUSED *background, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -475,7 +475,7 @@ herr_t
H5T_conv_order_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *_buf,
- void UNUSED *background, hid_t UNUSED dset_xfer_plist)
+ void UNUSED *background, hid_t UNUSED dxpl_id)
{
uint8_t *buf = (uint8_t*)_buf;
H5T_t *src = NULL;
@@ -858,7 +858,7 @@ done:
herr_t
H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t UNUSED bkg_stride, void *_buf,
- void UNUSED *background, hid_t UNUSED dset_xfer_plist)
+ void UNUSED *background, hid_t UNUSED dxpl_id)
{
uint8_t *buf = (uint8_t*)_buf;
H5T_t *src = NULL;
@@ -955,7 +955,7 @@ done:
herr_t
H5T_conv_b_b(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t UNUSED bkg_stride, void *_buf,
- void UNUSED *background, hid_t UNUSED dset_xfer_plist)
+ void UNUSED *background, hid_t UNUSED dxpl_id)
{
uint8_t *buf = (uint8_t*)_buf;
H5T_t *src=NULL, *dst=NULL; /*source and dest data types */
@@ -1171,7 +1171,7 @@ done:
*-------------------------------------------------------------------------
*/
static herr_t
-H5T_conv_struct_init (H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata)
+H5T_conv_struct_init (H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata, hid_t dxpl_id)
{
H5T_conv_struct_t *priv = (H5T_conv_struct_t*)(cdata->priv);
int i, j, *src2dst = NULL;
@@ -1245,7 +1245,7 @@ H5T_conv_struct_init (H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata)
for (i=0; i<src->u.compnd.nmembs; i++) {
if (src2dst[i]>=0) {
H5T_path_t *tpath = H5T_path_find(src->u.compnd.memb[i].type,
- dst->u.compnd.memb[src2dst[i]].type, NULL, NULL);
+ dst->u.compnd.memb[src2dst[i]].type, NULL, NULL, dxpl_id);
if (NULL==(priv->memb_path[i] = tpath)) {
H5MM_xfree(priv->src2dst);
@@ -1312,7 +1312,7 @@ done:
herr_t
H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride, void *_buf, void *_bkg,
- hid_t dset_xfer_plist)
+ hid_t dxpl_id)
{
uint8_t *buf = (uint8_t *)_buf; /*cast for pointer arithmetic */
uint8_t *bkg = (uint8_t *)_bkg; /*background pointer arithmetic */
@@ -1345,7 +1345,7 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
assert (H5T_COMPOUND==src->type);
assert (H5T_COMPOUND==dst->type);
- if (H5T_conv_struct_init (src, dst, cdata)<0)
+ if (H5T_conv_struct_init (src, dst, cdata, dxpl_id)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize conversion data");
break;
@@ -1370,7 +1370,7 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
assert (priv);
assert (bkg && cdata->need_bkg);
- if (cdata->recalc && H5T_conv_struct_init (src, dst, cdata)<0)
+ if (cdata->recalc && H5T_conv_struct_init (src, dst, cdata, dxpl_id)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize conversion data");
/*
@@ -1417,7 +1417,7 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
priv->dst_memb_id[src2dst[i]],
(hsize_t)1, 0, 0, /*no striding (packed array)*/
xbuf+src_memb->offset, xbkg+dst_memb->offset,
- dset_xfer_plist)<0)
+ dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data type member");
HDmemmove (xbuf+offset, xbuf+src_memb->offset,
dst_memb->size);
@@ -1447,7 +1447,7 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
priv->src_memb_id[i], priv->dst_memb_id[src2dst[i]],
(hsize_t)1, 0, 0, /*no striding (packed array)*/
xbuf+offset, xbkg+dst_memb->offset,
- dset_xfer_plist)<0)
+ dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data type member");
} else {
offset -= dst_memb->size;
@@ -1544,7 +1544,7 @@ done:
herr_t
H5T_conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t bkg_stride, void *_buf,
- void *_bkg, hid_t dset_xfer_plist)
+ void *_bkg, hid_t dxpl_id)
{
uint8_t *buf = (uint8_t *)_buf; /*cast for pointer arithmetic */
uint8_t *bkg = (uint8_t *)_bkg; /*background pointer arithmetic */
@@ -1578,7 +1578,7 @@ H5T_conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
assert (H5T_COMPOUND==dst->type);
/* Initialize data which is relatively constant */
- if (H5T_conv_struct_init (src, dst, cdata)<0)
+ if (H5T_conv_struct_init (src, dst, cdata, dxpl_id)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize conversion data");
priv = (H5T_conv_struct_t *)(cdata->priv);
src2dst = priv->src2dst;
@@ -1643,7 +1643,7 @@ H5T_conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
/* Update cached data if necessary */
- if (cdata->recalc && H5T_conv_struct_init (src, dst, cdata)<0)
+ if (cdata->recalc && H5T_conv_struct_init (src, dst, cdata, dxpl_id)<0)
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize conversion data");
priv = (H5T_conv_struct_t *)(cdata->priv);
src2dst = priv->src2dst;
@@ -1688,7 +1688,7 @@ H5T_conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
priv->dst_memb_id[src2dst[i]], nelmts,
buf_stride ? buf_stride : src->size,
bkg_stride, xbuf, xbkg,
- dset_xfer_plist)<0)
+ dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data type member");
for (elmtno=0; elmtno<nelmts; elmtno++) {
HDmemmove(xbkg, xbuf, dst_memb->size);
@@ -1726,7 +1726,7 @@ H5T_conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
priv->dst_memb_id[src2dst[i]], nelmts,
buf_stride ? buf_stride : src->size,
bkg_stride, xbuf, xbkg,
- dset_xfer_plist)<0)
+ dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data type member");
for (elmtno=0; elmtno<nelmts; elmtno++) {
HDmemmove(xbkg, xbuf, dst_memb->size);
@@ -1913,7 +1913,7 @@ done:
herr_t
H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t UNUSED bkg_stride, void *_buf,
- void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
uint8_t *buf = (uint8_t*)_buf; /*cast for pointer arithmetic */
H5T_t *src=NULL, *dst=NULL; /*src and dst data types */
@@ -2094,7 +2094,7 @@ done:
herr_t
H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride, void *_buf,
- void *_bkg, hid_t dset_xfer_plist)
+ void *_bkg, hid_t dxpl_id)
{
H5T_path_t *tpath; /* Type conversion path */
hid_t tsrc_id = -1, tdst_id = -1;/*temporary type atoms */
@@ -2213,7 +2213,7 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
/* Set up conversion path for base elements */
- if (NULL==(tpath=H5T_path_find(src->parent, dst->parent, NULL, NULL))) {
+ if (NULL==(tpath=H5T_path_find(src->parent, dst->parent, NULL, NULL, dxpl_id))) {
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest datatypes");
} else if (!H5T_IS_NOOP(tpath)) {
if ((tsrc_id = H5I_register(H5I_DATATYPE, H5T_copy(src->parent, H5T_COPY_ALL)))<0 ||
@@ -2253,7 +2253,7 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
} /* end if */
/* Read in VL sequence */
- if((*(src->u.vlen.read))(src->u.vlen.f,s,conv_buf,src_size)<0)
+ if((*(src->u.vlen.read))(src->u.vlen.f,dxpl_id,s,conv_buf,src_size)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_READERROR, FAIL, "can't read VL data");
/* Check if temporary buffer is large enough, resize if necessary */
@@ -2280,7 +2280,7 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
}
H5F_addr_decode(dst->u.vlen.f, (const uint8_t **)&tmp, &(bg_hobjid.addr));
INT32DECODE(tmp, bg_hobjid.idx);
- if(H5HG_read(dst->u.vlen.f,&bg_hobjid,tmp_buf)==NULL)
+ if(H5HG_read(dst->u.vlen.f,dxpl_id,&bg_hobjid,tmp_buf)==NULL)
HGOTO_ERROR (H5E_DATATYPE, H5E_READERROR, FAIL, "can't read VL sequence into background buffer");
} /* end if */
@@ -2294,11 +2294,11 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
/* Convert VL sequence */
H5_CHECK_OVERFLOW(seq_len,hssize_t,hsize_t);
- if (H5T_convert(tpath, tsrc_id, tdst_id, (hsize_t)seq_len, 0, bkg_stride, conv_buf, tmp_buf, dset_xfer_plist)<0)
+ if (H5T_convert(tpath, tsrc_id, tdst_id, (hsize_t)seq_len, 0, bkg_stride, conv_buf, tmp_buf, dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed");
/* Write sequence to destination location */
- if((*(dst->u.vlen.write))(dset_xfer_plist,dst->u.vlen.f,d,conv_buf, bg_ptr, (hsize_t)seq_len,(hsize_t)dst_base_size)<0)
+ if((*(dst->u.vlen.write))(dst->u.vlen.f,dxpl_id,d,conv_buf, bg_ptr, (hsize_t)seq_len,(hsize_t)dst_base_size)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "can't write VL data");
/* For nested VL case, free leftover heap objects from the deeper level if the length of new data elements is shorted than the old data elements.*/
@@ -2311,7 +2311,7 @@ H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
if(parent_seq_len>0) {
H5F_addr_decode(dst->u.vlen.f, (const uint8_t **)&tmp_p, &(parent_hobjid.addr));
INT32DECODE(tmp_p, parent_hobjid.idx);
- if(H5HG_remove(dst->u.vlen.f, &parent_hobjid)<0)
+ if(H5HG_remove(dst->u.vlen.f, dxpl_id,&parent_hobjid)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "Unable to remove heap object");
}
}
@@ -2378,7 +2378,7 @@ done:
herr_t
H5T_conv_array(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t bkg_stride, void *_buf,
- void UNUSED *_bkg, hid_t dset_xfer_plist)
+ void UNUSED *_bkg, hid_t dxpl_id)
{
H5T_path_t *tpath; /* Type conversion path */
hid_t tsrc_id = -1, tdst_id = -1;/*temporary type atoms */
@@ -2462,7 +2462,7 @@ H5T_conv_array(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
dst_delta = direction * (buf_stride ? buf_stride : dst->size);
/* Set up conversion path for base elements */
- if (NULL==(tpath=H5T_path_find(src->parent, dst->parent, NULL, NULL))) {
+ if (NULL==(tpath=H5T_path_find(src->parent, dst->parent, NULL, NULL, dxpl_id))) {
HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest datatypes");
} else if (!H5T_IS_NOOP(tpath)) {
if ((tsrc_id = H5I_register(H5I_DATATYPE, H5T_copy(src->parent, H5T_COPY_ALL)))<0 ||
@@ -2484,7 +2484,7 @@ H5T_conv_array(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
HDmemmove(dp, sp, src->size);
/* Convert array */
- if (H5T_convert(tpath, tsrc_id, tdst_id, (hsize_t)src->u.array.nelem, 0, bkg_stride, dp, bkg_buf, dset_xfer_plist)<0)
+ if (H5T_convert(tpath, tsrc_id, tdst_id, (hsize_t)src->u.array.nelem, 0, bkg_stride, dp, bkg_buf, dxpl_id)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed");
/* Advance the source & destination pointers */
@@ -2538,7 +2538,7 @@ done:
herr_t
H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t UNUSED bkg_stride, void *buf,
- void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
H5T_t *src = NULL; /*source data type */
H5T_t *dst = NULL; /*destination data type */
@@ -2865,7 +2865,7 @@ done:
herr_t
H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
/* Traversal-related variables */
H5T_t *src_p; /*source data type */
@@ -3289,7 +3289,7 @@ done:
herr_t
H5T_conv_s_s (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, hsize_t nelmts,
size_t buf_stride, size_t UNUSED bkg_stride, void *buf,
- void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
H5T_t *src=NULL; /*source data type */
H5T_t *dst=NULL; /*destination data type */
@@ -3512,7 +3512,7 @@ herr_t
H5T_conv_schar_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3545,7 +3545,7 @@ herr_t
H5T_conv_uchar_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3578,7 +3578,7 @@ herr_t
H5T_conv_schar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3611,7 +3611,7 @@ herr_t
H5T_conv_schar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3644,7 +3644,7 @@ herr_t
H5T_conv_uchar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3677,7 +3677,7 @@ herr_t
H5T_conv_uchar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3709,7 +3709,7 @@ done:
herr_t
H5T_conv_schar_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3741,7 +3741,7 @@ done:
herr_t
H5T_conv_schar_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3773,7 +3773,7 @@ done:
herr_t
H5T_conv_uchar_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3805,7 +3805,7 @@ done:
herr_t
H5T_conv_uchar_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3837,7 +3837,7 @@ done:
herr_t
H5T_conv_schar_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3870,7 +3870,7 @@ herr_t
H5T_conv_schar_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3902,7 +3902,7 @@ done:
herr_t
H5T_conv_uchar_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3935,7 +3935,7 @@ herr_t
H5T_conv_uchar_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -3968,7 +3968,7 @@ herr_t
H5T_conv_schar_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4001,7 +4001,7 @@ herr_t
H5T_conv_schar_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4034,7 +4034,7 @@ herr_t
H5T_conv_uchar_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4067,7 +4067,7 @@ herr_t
H5T_conv_uchar_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4100,7 +4100,7 @@ herr_t
H5T_conv_short_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4133,7 +4133,7 @@ herr_t
H5T_conv_short_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4166,7 +4166,7 @@ herr_t
H5T_conv_ushort_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4199,7 +4199,7 @@ herr_t
H5T_conv_ushort_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4232,7 +4232,7 @@ herr_t
H5T_conv_short_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4265,7 +4265,7 @@ herr_t
H5T_conv_ushort_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4298,7 +4298,7 @@ herr_t
H5T_conv_short_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4331,7 +4331,7 @@ herr_t
H5T_conv_short_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4364,7 +4364,7 @@ herr_t
H5T_conv_ushort_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4397,7 +4397,7 @@ herr_t
H5T_conv_ushort_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4430,7 +4430,7 @@ herr_t
H5T_conv_short_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4463,7 +4463,7 @@ herr_t
H5T_conv_short_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4496,7 +4496,7 @@ herr_t
H5T_conv_ushort_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4529,7 +4529,7 @@ herr_t
H5T_conv_ushort_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4562,7 +4562,7 @@ herr_t
H5T_conv_short_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4595,7 +4595,7 @@ herr_t
H5T_conv_short_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4628,7 +4628,7 @@ herr_t
H5T_conv_ushort_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4661,7 +4661,7 @@ herr_t
H5T_conv_ushort_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4694,7 +4694,7 @@ herr_t
H5T_conv_int_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4727,7 +4727,7 @@ herr_t
H5T_conv_int_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4760,7 +4760,7 @@ herr_t
H5T_conv_uint_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4793,7 +4793,7 @@ herr_t
H5T_conv_uint_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4826,7 +4826,7 @@ herr_t
H5T_conv_int_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4859,7 +4859,7 @@ herr_t
H5T_conv_int_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4892,7 +4892,7 @@ herr_t
H5T_conv_uint_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4925,7 +4925,7 @@ herr_t
H5T_conv_uint_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4957,7 +4957,7 @@ done:
herr_t
H5T_conv_int_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -4989,7 +4989,7 @@ done:
herr_t
H5T_conv_uint_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5021,7 +5021,7 @@ done:
herr_t
H5T_conv_int_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5053,7 +5053,7 @@ done:
herr_t
H5T_conv_int_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5085,7 +5085,7 @@ done:
herr_t
H5T_conv_uint_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5117,7 +5117,7 @@ done:
herr_t
H5T_conv_uint_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5149,7 +5149,7 @@ done:
herr_t
H5T_conv_int_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5181,7 +5181,7 @@ done:
herr_t
H5T_conv_int_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5213,7 +5213,7 @@ done:
herr_t
H5T_conv_uint_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5246,7 +5246,7 @@ herr_t
H5T_conv_uint_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5278,7 +5278,7 @@ done:
herr_t
H5T_conv_long_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5310,7 +5310,7 @@ done:
herr_t
H5T_conv_long_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5343,7 +5343,7 @@ herr_t
H5T_conv_ulong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5376,7 +5376,7 @@ herr_t
H5T_conv_ulong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5408,7 +5408,7 @@ done:
herr_t
H5T_conv_long_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5441,7 +5441,7 @@ herr_t
H5T_conv_long_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5473,7 +5473,7 @@ done:
herr_t
H5T_conv_ulong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5506,7 +5506,7 @@ herr_t
H5T_conv_ulong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5538,7 +5538,7 @@ done:
herr_t
H5T_conv_long_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5570,7 +5570,7 @@ done:
herr_t
H5T_conv_long_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5602,7 +5602,7 @@ done:
herr_t
H5T_conv_ulong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5634,7 +5634,7 @@ done:
herr_t
H5T_conv_ulong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5666,7 +5666,7 @@ done:
herr_t
H5T_conv_long_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5698,7 +5698,7 @@ done:
herr_t
H5T_conv_ulong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5730,7 +5730,7 @@ done:
herr_t
H5T_conv_long_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5763,7 +5763,7 @@ herr_t
H5T_conv_long_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5796,7 +5796,7 @@ herr_t
H5T_conv_ulong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5829,7 +5829,7 @@ herr_t
H5T_conv_ulong_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5862,7 +5862,7 @@ herr_t
H5T_conv_llong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5895,7 +5895,7 @@ herr_t
H5T_conv_llong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5928,7 +5928,7 @@ herr_t
H5T_conv_ullong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5961,7 +5961,7 @@ herr_t
H5T_conv_ullong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -5994,7 +5994,7 @@ herr_t
H5T_conv_llong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6027,7 +6027,7 @@ herr_t
H5T_conv_llong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6060,7 +6060,7 @@ herr_t
H5T_conv_ullong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6093,7 +6093,7 @@ herr_t
H5T_conv_ullong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6125,7 +6125,7 @@ done:
herr_t
H5T_conv_llong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6157,7 +6157,7 @@ done:
herr_t
H5T_conv_llong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6189,7 +6189,7 @@ done:
herr_t
H5T_conv_ullong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6222,7 +6222,7 @@ herr_t
H5T_conv_ullong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6254,7 +6254,7 @@ done:
herr_t
H5T_conv_llong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
- void *buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plist)
+ void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6287,7 +6287,7 @@ herr_t
H5T_conv_llong_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6320,7 +6320,7 @@ herr_t
H5T_conv_ullong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6353,7 +6353,7 @@ herr_t
H5T_conv_ullong_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6386,7 +6386,7 @@ herr_t
H5T_conv_llong_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6419,7 +6419,7 @@ herr_t
H5T_conv_ullong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
herr_t ret_value=SUCCEED; /* Return value */
@@ -6455,7 +6455,7 @@ herr_t
H5T_conv_float_double (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
hsize_t elmtno; /*element number */
uint8_t *src, *s; /*source buffer */
@@ -6575,7 +6575,7 @@ herr_t
H5T_conv_double_float (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
hsize_t elmtno; /*element number */
uint8_t *src, *s; /*source buffer */
@@ -6701,7 +6701,7 @@ herr_t
H5T_conv_i32le_f64le (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
hsize_t nelmts, size_t buf_stride,
size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
- hid_t UNUSED dset_xfer_plist)
+ hid_t UNUSED dxpl_id)
{
uint8_t *s=NULL, *d=NULL; /*src and dst buf pointers */
uint8_t tmp[8]; /*temporary destination buffer */
diff --git a/src/H5Tpkg.h b/src/H5Tpkg.h
index c3a9703..5b4cf09 100644
--- a/src/H5Tpkg.h
+++ b/src/H5Tpkg.h
@@ -91,8 +91,8 @@ typedef struct H5T_enum_t {
/* VL function pointers */
typedef hssize_t (*H5T_vlen_getlenfunc_t)(H5F_t *f, void *vl_addr);
-typedef herr_t (*H5T_vlen_readfunc_t)(H5F_t *f, void *vl_addr, void *buf, size_t len);
-typedef herr_t (*H5T_vlen_writefunc_t)(hid_t dxpl_id, H5F_t *f, void *vl_addr, void *buf, void *bg_addr, hsize_t seq_len, hsize_t base_size);
+typedef herr_t (*H5T_vlen_readfunc_t)(H5F_t *f, hid_t dxpl_id, void *vl_addr, void *buf, size_t len);
+typedef herr_t (*H5T_vlen_writefunc_t)(H5F_t *f, hid_t dxpl_id, void *vl_addr, void *buf, void *bg_addr, hsize_t seq_len, hsize_t base_size);
/* A VL datatype */
typedef struct H5T_vlen_t {
@@ -779,14 +779,14 @@ H5_DLL htri_t H5T_bit_inc(uint8_t *buf, size_t start, size_t size);
/* VL functions */
H5_DLL hssize_t H5T_vlen_seq_mem_getlen(H5F_t *f, void *vl_addr);
-H5_DLL herr_t H5T_vlen_seq_mem_read(H5F_t *f, void *vl_addr, void *_buf, size_t len);
-H5_DLL herr_t H5T_vlen_seq_mem_write(hid_t dxpl_id, H5F_t *f, void *vl_addr, void *_buf, void *bg_addr, hsize_t seq_len, hsize_t base_size);
+H5_DLL herr_t H5T_vlen_seq_mem_read(H5F_t *f, hid_t dxpl_id, void *vl_addr, void *_buf, size_t len);
+H5_DLL herr_t H5T_vlen_seq_mem_write(H5F_t *f, hid_t dxpl_id, void *vl_addr, void *_buf, void *bg_addr, hsize_t seq_len, hsize_t base_size);
H5_DLL hssize_t H5T_vlen_str_mem_getlen(H5F_t *f, void *vl_addr);
-H5_DLL herr_t H5T_vlen_str_mem_read(H5F_t *f, void *vl_addr, void *_buf, size_t len);
-H5_DLL herr_t H5T_vlen_str_mem_write(hid_t dxpl_id, H5F_t *f, void *vl_addr, void *_buf, void *bg_addr, hsize_t seq_len, hsize_t base_size);
+H5_DLL herr_t H5T_vlen_str_mem_read(H5F_t *f, hid_t dxpl_id, void *vl_addr, void *_buf, size_t len);
+H5_DLL herr_t H5T_vlen_str_mem_write(H5F_t *f, hid_t dxpl_id, void *vl_addr, void *_buf, void *bg_addr, hsize_t seq_len, hsize_t base_size);
H5_DLL hssize_t H5T_vlen_disk_getlen(H5F_t *f, void *vl_addr);
-H5_DLL herr_t H5T_vlen_disk_read(H5F_t *f, void *vl_addr, void *_buf, size_t len);
-H5_DLL herr_t H5T_vlen_disk_write(hid_t dxpl_id, H5F_t *f, void *vl_addr, void *_buf, void *bg_addr, hsize_t seq_len, hsize_t base_size);
+H5_DLL herr_t H5T_vlen_disk_read(H5F_t *f, hid_t dxpl_id, void *vl_addr, void *_buf, size_t len);
+H5_DLL herr_t H5T_vlen_disk_write(H5F_t *f, hid_t dxpl_id, void *vl_addr, void *_buf, void *bg_addr, hsize_t seq_len, hsize_t base_size);
/* Array functions */
H5_DLL H5T_t * H5T_array_create(H5T_t *base, int ndims,
diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h
index 7491749..fd35f28 100644
--- a/src/H5Tprivate.h
+++ b/src/H5Tprivate.h
@@ -94,17 +94,17 @@ typedef struct {
/* Private functions */
H5_DLL herr_t H5TN_init_interface(void);
H5_DLL herr_t H5T_init(void);
-H5_DLL htri_t H5T_isa(H5G_entry_t *ent);
-H5_DLL H5T_t *H5T_open(H5G_entry_t *loc, const char *name);
-H5_DLL H5T_t *H5T_open_oid(H5G_entry_t *ent);
+H5_DLL htri_t H5T_isa(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL H5T_t *H5T_open(H5G_entry_t *loc, const char *name, hid_t dxpl_id);
+H5_DLL H5T_t *H5T_open_oid(H5G_entry_t *ent, hid_t dxpl_id);
H5_DLL H5T_t *H5T_create(H5T_class_t type, size_t size);
H5_DLL H5T_t *H5T_copy(const H5T_t *old_dt, H5T_copy_t method);
-H5_DLL herr_t H5T_commit(H5G_entry_t *loc, const char *name, H5T_t *type);
+H5_DLL herr_t H5T_commit(H5G_entry_t *loc, const char *name, H5T_t *type, hid_t dxpl_id);
H5_DLL herr_t H5T_lock(H5T_t *dt, hbool_t immutable);
H5_DLL herr_t H5T_free(H5T_t *dt);
H5_DLL herr_t H5T_close(H5T_t *dt);
H5_DLL herr_t H5T_unregister(H5T_pers_t pers, const char *name, H5T_t *src,
- H5T_t *dst, H5T_conv_t func);
+ H5T_t *dst, H5T_conv_t func, hid_t dxpl_id);
H5_DLL herr_t H5T_path_force_reinit(H5T_t *dt);
H5_DLL H5T_class_t H5T_get_class(const H5T_t *dt);
H5_DLL htri_t H5T_detect_class (const H5T_t *dt, H5T_class_t cls);
@@ -139,7 +139,7 @@ H5_DLL H5G_entry_t *H5T_entof(H5T_t *dt);
H5_DLL htri_t H5T_is_immutable(H5T_t *dt);
H5_DLL htri_t H5T_is_named(H5T_t *dt);
H5_DLL H5T_path_t *H5T_path_find(const H5T_t *src, const H5T_t *dst,
- const char *name, H5T_conv_t func);
+ const char *name, H5T_conv_t func, hid_t dxpl_id);
H5_DLL herr_t H5T_sort_value(H5T_t *dt, int *map);
H5_DLL herr_t H5T_sort_name(H5T_t *dt, int *map);
H5_DLL herr_t H5T_convert(H5T_path_t *tpath, hid_t src_id, hid_t dst_id,
diff --git a/src/H5Tvlen.c b/src/H5Tvlen.c
index fa65056..c1f9926 100644
--- a/src/H5Tvlen.c
+++ b/src/H5Tvlen.c
@@ -179,7 +179,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5T_vlen_seq_mem_read(H5F_t UNUSED *f, void *vl_addr, void *buf, size_t len)
+H5T_vlen_seq_mem_read(H5F_t UNUSED *f, hid_t dxpl_id, void *vl_addr, void *buf, size_t len)
{
hvl_t *vl=(hvl_t *)vl_addr; /* Pointer to the user's hvl_t information */
herr_t ret_value=SUCCEED; /* Return value */
@@ -212,7 +212,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5T_vlen_seq_mem_write(hid_t plist_id, H5F_t UNUSED *f, void *vl_addr, void *buf, void UNUSED *bg_addr, hsize_t seq_len, hsize_t base_size)
+H5T_vlen_seq_mem_write(H5F_t UNUSED *f, hid_t dxpl_id, void *vl_addr, void *buf, void UNUSED *bg_addr, hsize_t seq_len, hsize_t base_size)
{
H5MM_allocate_t alloc_func; /* Vlen allocation function */
void *alloc_info; /* Vlen allocation information */
@@ -233,7 +233,7 @@ H5T_vlen_seq_mem_write(hid_t plist_id, H5F_t UNUSED *f, void *vl_addr, void *buf
/* Use the user's memory allocation routine is one is defined */
/* Get the allocation function & info */
- if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+ if(NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list");
if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_NAME,&alloc_func)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
@@ -316,7 +316,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5T_vlen_str_mem_read(H5F_t UNUSED *f, void *vl_addr, void *buf, size_t len)
+H5T_vlen_str_mem_read(H5F_t UNUSED *f, hid_t dxpl_id, void *vl_addr, void *buf, size_t len)
{
char *s=*(char **)vl_addr; /* Pointer to the user's hvl_t information */
herr_t ret_value=SUCCEED; /* Return value */
@@ -352,7 +352,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5T_vlen_str_mem_write(hid_t plist_id, H5F_t UNUSED *f, void *vl_addr, void *buf, void UNUSED *bg_addr, hsize_t seq_len, hsize_t base_size)
+H5T_vlen_str_mem_write(H5F_t UNUSED *f, hid_t dxpl_id, void *vl_addr, void *buf, void UNUSED *bg_addr, hsize_t seq_len, hsize_t base_size)
{
H5MM_allocate_t alloc_func; /* Vlen allocation function */
void *alloc_info; /* Vlen allocation information */
@@ -370,7 +370,7 @@ H5T_vlen_str_mem_write(hid_t plist_id, H5F_t UNUSED *f, void *vl_addr, void *buf
/* Use the user's memory allocation routine if one is defined */
/* Get the allocation function & info */
- if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+ if(NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER)))
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list");
if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_NAME,&alloc_func)<0)
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
@@ -442,7 +442,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5T_vlen_disk_read(H5F_t *f, void *vl_addr, void *buf, size_t UNUSED len)
+H5T_vlen_disk_read(H5F_t *f, hid_t dxpl_id, void *vl_addr, void *buf, size_t UNUSED len)
{
uint8_t *vl=(uint8_t *)vl_addr; /* Pointer to the user's hvl_t information */
H5HG_t hobjid;
@@ -466,7 +466,7 @@ H5T_vlen_disk_read(H5F_t *f, void *vl_addr, void *buf, size_t UNUSED len)
INT32DECODE(vl,hobjid.idx);
/* Read the VL information from disk */
- if(H5HG_read(f,&hobjid,buf)==NULL)
+ if(H5HG_read(f,dxpl_id, &hobjid,buf)==NULL)
HGOTO_ERROR(H5E_DATATYPE, H5E_READERROR, FAIL, "Unable to read VL information");
} /* end if */
@@ -494,7 +494,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5T_vlen_disk_write(hid_t UNUSED plist_id, H5F_t *f, void *vl_addr, void *buf, void *bg_addr, hsize_t seq_len, hsize_t base_size)
+H5T_vlen_disk_write(H5F_t *f, hid_t dxpl_id, void *vl_addr, void *buf, void *bg_addr, hsize_t seq_len, hsize_t base_size)
{
uint8_t *vl=(uint8_t *)vl_addr; /*Pointer to the user's hvl_t information*/
uint8_t *bg=(uint8_t *)bg_addr; /*Pointer to the old data hvl_t */
@@ -523,7 +523,7 @@ H5T_vlen_disk_write(hid_t UNUSED plist_id, H5F_t *f, void *vl_addr, void *buf, v
H5F_addr_decode(f, (const uint8_t **)&bg, &(bg_hobjid.addr));
INT32DECODE(bg, bg_hobjid.idx);
/* Free heap object */
- if(H5HG_remove(f, &bg_hobjid)<0)
+ if(H5HG_remove(f, dxpl_id, &bg_hobjid)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "Unable to remove heap object");
} /* end if */
} /* end if */
@@ -536,7 +536,7 @@ H5T_vlen_disk_write(hid_t UNUSED plist_id, H5F_t *f, void *vl_addr, void *buf, v
if(seq_len!=0) {
/* Write the VL information to disk (allocates space also) */
H5_ASSIGN_OVERFLOW(len,(seq_len*base_size),hsize_t,size_t);
- if(H5HG_insert(f,len,buf,&hobjid)<0)
+ if(H5HG_insert(f,dxpl_id, len,buf,&hobjid)<0)
HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "Unable to write VL information");
} /* end if */
else
diff --git a/test/gheap.c b/test/gheap.c
index 16bd0e5..7ed5b46 100644
--- a/test/gheap.c
+++ b/test/gheap.c
@@ -79,7 +79,7 @@ test_1 (hid_t fapl)
size = i+1;
memset (out, 'A'+i%26, size);
H5Eclear ();
- status = H5HG_insert (f, size, out, obj+i);
+ status = H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i);
if (status<0) {
H5_FAILED();
puts(" Unable to insert object into global heap");
@@ -98,7 +98,7 @@ test_1 (hid_t fapl)
size = i+1;
memset (out, 'A'+i%26, size);
H5Eclear ();
- if (NULL==H5HG_read (f, obj+i, in)) {
+ if (NULL==H5HG_read (f, H5P_DATASET_XFER_DEFAULT, obj+i, in)) {
H5_FAILED();
puts(" Unable to read object");
nerrors++;
@@ -171,7 +171,7 @@ test_2 (hid_t fapl)
size = 1024-i;
memset (out, 'A'+i%26, size);
H5Eclear ();
- if (H5HG_insert (f, size, out, obj+i)<0) {
+ if (H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i)<0) {
H5_FAILED();
puts(" Unable to insert object into global heap");
nerrors++;
@@ -185,7 +185,7 @@ test_2 (hid_t fapl)
size = 1024-i;
memset (out, 'A'+i%26, size);
H5Eclear ();
- if (NULL==H5HG_read (f, obj+i, in)) {
+ if (NULL==H5HG_read (f, H5P_DATASET_XFER_DEFAULT, obj+i, in)) {
H5_FAILED();
puts(" Unable to read object");
nerrors++;
@@ -256,7 +256,7 @@ test_3 (hid_t fapl)
size = i%30+100;
memset (out, 'A'+i%26, size);
H5Eclear ();
- status = H5HG_insert (f, size, out, obj+i);
+ status = H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i);
if (status<0) {
H5_FAILED();
puts(" Unable to insert object into global heap");
@@ -266,7 +266,7 @@ test_3 (hid_t fapl)
/* Remove everything */
for (i=0; i<1024; i++) {
- status = H5HG_remove (f, obj+i);
+ status = H5HG_remove (f, H5P_DATASET_XFER_DEFAULT, obj+i);
if (status<0) {
H5_FAILED();
puts(" Unable to remove object");
@@ -335,7 +335,7 @@ test_4 (hid_t fapl)
size = i%30+100;
memset (out, 'A'+i%26, size);
H5Eclear ();
- status = H5HG_insert (f, size, out, obj+i);
+ status = H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i);
if (status<0) {
H5_FAILED();
puts(" Unable to insert object into global heap");
@@ -349,7 +349,7 @@ test_4 (hid_t fapl)
*/
if (1==i%3) {
H5Eclear ();
- status = H5HG_remove (f, obj+i-1);
+ status = H5HG_remove (f, H5P_DATASET_XFER_DEFAULT, obj+i-1);
if (status<0) {
H5_FAILED();
puts(" Unable to remove object");
diff --git a/test/istore.c b/test/istore.c
index 3dfb8cf..3f1e16e 100644
--- a/test/istore.c
+++ b/test/istore.c
@@ -101,7 +101,7 @@ new_object(H5F_t *f, const char *name, unsigned ndims, H5G_entry_t *ent/*out*/)
/* Create the object header */
HDmemset(ent,0,sizeof(H5G_entry_t));
- if (H5O_create(f, 64, ent)) {
+ if (H5O_create(f, H5P_DATASET_XFER_DEFAULT, 64, ent)) {
H5_FAILED();
puts(" H5O_create() = NULL");
goto error;
@@ -118,15 +118,15 @@ new_object(H5F_t *f, const char *name, unsigned ndims, H5G_entry_t *ent/*out*/)
}
}
/* Create the root of the B-tree that describes chunked storage */
- H5F_istore_create (f, &layout/*in,out*/);
- if (H5O_modify(ent, H5O_LAYOUT, H5O_NEW_MESG, 0, 1, &layout) < 0) {
+ H5F_istore_create (f, H5P_DATASET_XFER_DEFAULT, &layout/*in,out*/);
+ if (H5O_modify(ent, H5O_LAYOUT, H5O_NEW_MESG, 0, 1, &layout, H5P_DATASET_XFER_DEFAULT) < 0) {
H5_FAILED();
puts(" H5O_modify istore message failure.");
goto error;
}
/* Give the object header a name */
- if (H5G_insert(H5G_entof(H5G_rootof(f)), name, ent) < 0) {
+ if (H5G_insert(H5G_entof(H5G_rootof(f)), name, ent, H5P_DATASET_XFER_DEFAULT) < 0) {
H5_FAILED();
printf(" H5G_insert(f, name=\"%s\", ent) failed\n", name);
goto error;
@@ -247,7 +247,7 @@ test_extend(H5F_t *f, const char *prefix,
printf(" Cannot create %u-d object `%s'\n", ndims, name);
goto error;
}
- if (NULL == H5O_read(&handle, H5O_LAYOUT, 0, &layout)) {
+ if (NULL == H5O_read(&handle, H5O_LAYOUT, 0, &layout, H5P_DATASET_XFER_DEFAULT)) {
H5_FAILED();
puts(" Unable to read istore message.");
goto error;
@@ -456,7 +456,7 @@ test_sparse(H5F_t *f, const char *prefix, size_t nblocks,
printf(" Cannot create %u-d object `%s'\n", ndims, name);
goto error;
}
- if (NULL == H5O_read(&handle, H5O_LAYOUT, 0, &layout)) {
+ if (NULL == H5O_read(&handle, H5O_LAYOUT, 0, &layout, H5P_DATASET_XFER_DEFAULT)) {
H5_FAILED();
printf(" Unable to read istore message\n");
goto error;
diff --git a/test/lheap.c b/test/lheap.c
index 44fb615..98b741e 100644
--- a/test/lheap.c
+++ b/test/lheap.c
@@ -66,7 +66,7 @@ main(void)
H5Eprint(stdout);
goto error;
}
- if (H5HL_create(f, 0, &heap_addr/*out*/)<0) {
+ if (H5HL_create(f, H5P_DATASET_XFER_DEFAULT, 0, &heap_addr/*out*/)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
@@ -76,7 +76,7 @@ main(void)
for (j=4; j<i; j++) buf[j] = '0' + j%10;
if (j>4) buf[j] = '\0';
- if ((size_t)(-1)==(obj[i]=H5HL_insert(f, heap_addr, strlen(buf)+1,
+ if ((size_t)(-1)==(obj[i]=H5HL_insert(f, H5P_DATASET_XFER_DEFAULT, heap_addr, strlen(buf)+1,
buf))) {
H5_FAILED();
H5Eprint(stdout);
@@ -102,7 +102,7 @@ main(void)
sprintf(buf, "%03d-", i);
for (j=4; j<i; j++) buf[j] = '0' + j%10;
if (j>4) buf[j] = '\0';
- if (NULL==(s=H5HL_peek(f, heap_addr, obj[i]))) {
+ if (NULL==(s=H5HL_peek(f, H5P_DATASET_XFER_DEFAULT, heap_addr, obj[i]))) {
H5_FAILED();
H5Eprint(stdout);
goto error;
diff --git a/test/ohdr.c b/test/ohdr.c
index 3884e1a..143146d 100644
--- a/test/ohdr.c
+++ b/test/ohdr.c
@@ -69,7 +69,7 @@ main(void)
*/
TESTING("object header creation");
HDmemset(&oh_ent,0,sizeof(H5G_entry_t));
- if (H5O_create(f, 64, &oh_ent/*out*/)<0) {
+ if (H5O_create(f, H5P_DATASET_XFER_DEFAULT, 64, &oh_ent/*out*/)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
@@ -80,17 +80,17 @@ main(void)
TESTING("message creation");
stab.btree_addr = 11111111;
stab.heap_addr = 22222222;
- if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab)<0) {
+ if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
- if (H5AC_flush(f, NULL, HADDR_UNDEF, TRUE)<0) {
+ if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, TRUE)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
- if (NULL==H5O_read(&oh_ent, H5O_STAB, 0, &ro)) {
+ if (NULL==H5O_read(&oh_ent, H5O_STAB, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
H5_FAILED();
H5Eprint(stdout);
goto error;
@@ -112,17 +112,17 @@ main(void)
TESTING("message modification");
stab.btree_addr = 33333333;
stab.heap_addr = 44444444;
- if (H5O_modify(&oh_ent, H5O_STAB, 0, 0, 1, &stab)<0) {
+ if (H5O_modify(&oh_ent, H5O_STAB, 0, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
- if (H5AC_flush(f, NULL, HADDR_UNDEF, TRUE)<0) {
+ if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, TRUE)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
- if (NULL==H5O_read(&oh_ent, H5O_STAB, 0, &ro)) {
+ if (NULL==H5O_read(&oh_ent, H5O_STAB, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
H5_FAILED();
H5Eprint(stdout);
goto error;
@@ -145,17 +145,17 @@ main(void)
TESTING("duplicate message creation");
stab.btree_addr = 55555555;
stab.heap_addr = 66666666;
- if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab)<0) {
+ if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
- if (H5AC_flush(f, NULL, HADDR_UNDEF, TRUE)<0) {
+ if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, TRUE)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
- if (NULL==H5O_read(&oh_ent, H5O_STAB, 1, &ro)) {
+ if (NULL==H5O_read(&oh_ent, H5O_STAB, 1, &ro, H5P_DATASET_XFER_DEFAULT)) {
H5_FAILED();
H5Eprint(stdout);
goto error;
@@ -177,17 +177,17 @@ main(void)
TESTING("duplicate message modification");
stab.btree_addr = 77777777;
stab.heap_addr = 88888888;
- if (H5O_modify(&oh_ent, H5O_STAB, 1, 0, 1, &stab)<0) {
+ if (H5O_modify(&oh_ent, H5O_STAB, 1, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
- if (H5AC_flush(f, NULL, HADDR_UNDEF, TRUE)<0) {
+ if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, TRUE)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
- if (NULL==H5O_read(&oh_ent, H5O_STAB, 1, &ro)) {
+ if (NULL==H5O_read(&oh_ent, H5O_STAB, 1, &ro, H5P_DATASET_XFER_DEFAULT)) {
H5_FAILED();
H5Eprint(stdout);
goto error;
@@ -211,13 +211,13 @@ main(void)
for (i=0; i<40; i++) {
stab.btree_addr = (i+1)*1000+1;
stab.heap_addr = (i+1)*1000+2;
- if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab)<0) {
+ if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
}
- if (H5AC_flush(f, NULL, HADDR_UNDEF, TRUE)<0) {
+ if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, TRUE)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
@@ -232,12 +232,12 @@ main(void)
for (i=0; i<10; i++) {
stab.btree_addr = (i + 1) * 1000 + 10;
stab.heap_addr = (i + 1) * 1000 + 20;
- if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab)<0) {
+ if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
- if (H5AC_flush(f, NULL, HADDR_UNDEF, TRUE)<0) {
+ if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, NULL, HADDR_UNDEF, TRUE)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
@@ -249,12 +249,12 @@ main(void)
* Delete all symbol table messages.
*/
TESTING("message deletion");
- if (H5O_remove(&oh_ent, H5O_STAB, H5O_ALL)<0) {
+ if (H5O_remove(&oh_ent, H5O_STAB, H5O_ALL, H5P_DATASET_XFER_DEFAULT)<0) {
H5_FAILED();
H5Eprint(stdout);
goto error;
}
- if (H5O_read(&oh_ent, H5O_STAB, 0, &ro)) {
+ if (H5O_read(&oh_ent, H5O_STAB, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
H5_FAILED();
puts(" H5O_read() should have failed but didn't");
H5Eclear();
diff --git a/testpar/t_dset.c b/testpar/t_dset.c
index a65a3ae..eea1bd3 100644
--- a/testpar/t_dset.c
+++ b/testpar/t_dset.c
@@ -589,9 +589,9 @@ dataset_writeAll(char *filename)
/* set up the collective transfer properties list */
xfer_plist = H5Pcreate (H5P_DATASET_XFER);
- VRFY((xfer_plist >= 0), "");
+ VRFY((xfer_plist >= 0), "H5Pcreate xfer succeeded");
ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
- VRFY((ret >= 0), "H5Pcreate xfer succeeded");
+ VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
/* write data collectively */
MESG("writeAll by Row");
@@ -1097,6 +1097,23 @@ extend_writeInd(char *filename)
acc_tpl = create_faccess_plist(comm, info, facc_type);
VRFY((acc_tpl >= 0), "");
+/* Reduce the number of metadata cache slots, so that there are cache
+ * collisions during the raw data I/O on the chunked dataset. This stresses
+ * the metadata cache and tests for cache bugs. -QAK
+ */
+{
+ int mdc_nelmts;
+ size_t rdcc_nelmts;
+ size_t rdcc_nbytes;
+ double rdcc_w0;
+
+ ret=H5Pget_cache(acc_tpl,&mdc_nelmts,&rdcc_nelmts,&rdcc_nbytes,&rdcc_w0);
+ VRFY((ret >= 0), "H5Pget_cache succeeded");
+ mdc_nelmts=4;
+ ret=H5Pset_cache(acc_tpl,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0);
+ VRFY((ret >= 0), "H5Pset_cache succeeded");
+}
+
/* create the file collectively */
fid=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
VRFY((fid >= 0), "H5Fcreate succeeded");
diff --git a/tools/misc/h5debug.c b/tools/misc/h5debug.c
index 1f606fb..09b8c7f 100644
--- a/tools/misc/h5debug.c
+++ b/tools/misc/h5debug.c
@@ -104,25 +104,25 @@ main(int argc, char *argv[])
/*
* Debug the boot block.
*/
- status = H5F_debug(f, addr, stdout, 0, VCOL);
+ status = H5F_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
} else if (!HDmemcmp(sig, H5HL_MAGIC, H5HL_SIZEOF_MAGIC)) {
/*
* Debug a local heap.
*/
- status = H5HL_debug(f, addr, stdout, 0, VCOL);
+ status = H5HL_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
} else if (!HDmemcmp (sig, H5HG_MAGIC, H5HG_SIZEOF_MAGIC)) {
/*
* Debug a global heap collection.
*/
- status = H5HG_debug (f, addr, stdout, 0, VCOL);
+ status = H5HG_debug (f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
} else if (!HDmemcmp(sig, H5G_NODE_MAGIC, H5G_NODE_SIZEOF_MAGIC)) {
/*
* Debug a symbol table node.
*/
- status = H5G_node_debug(f, addr, stdout, 0, VCOL, extra);
+ status = H5G_node_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra);
} else if (!HDmemcmp(sig, H5B_MAGIC, H5B_SIZEOF_MAGIC)) {
/*
@@ -134,17 +134,16 @@ main(int argc, char *argv[])
switch (subtype) {
case H5B_SNODE_ID:
- status = H5G_node_debug(f, addr, stdout, 0, VCOL, extra);
+ status = H5G_node_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra);
break;
case H5B_ISTORE_ID:
ndims = (int)extra;
- status = H5F_istore_debug (f, addr, stdout, 0, VCOL, ndims);
+ status = H5F_istore_debug (f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, ndims);
break;
default:
- fprintf(stderr, "Unknown B-tree subtype %u\n",
- (unsigned)(subtype));
+ fprintf(stderr, "Unknown B-tree subtype %u\n", (unsigned)(subtype));
HDexit(4);
}
@@ -153,7 +152,7 @@ main(int argc, char *argv[])
* This could be an object header. Since they don't have a signature
* it's a somewhat "ify" detection.
*/
- status = H5O_debug(f, addr, stdout, 0, VCOL);
+ status = H5O_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
} else {
/*