summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlbert Cheng <acheng@hdfgroup.org>2000-10-31 18:02:03 (GMT)
committerAlbert Cheng <acheng@hdfgroup.org>2000-10-31 18:02:03 (GMT)
commit0a6cfff27d12c77923616b34f231b3c8df8d6397 (patch)
tree3f095edb51e3e47429744779357f0d571f0327b9
parentfeb7e97b1394ace6a5e8ce2100b9a1e68a1ed25c (diff)
downloadhdf5-0a6cfff27d12c77923616b34f231b3c8df8d6397.zip
hdf5-0a6cfff27d12c77923616b34f231b3c8df8d6397.tar.gz
hdf5-0a6cfff27d12c77923616b34f231b3c8df8d6397.tar.bz2
[svn-r2774] H5FD.c:
Purpose: Bug fix Description: H5FD_close() wiped clean the public information before closing the FD. This caused problem to the lower level close() which wants to verify it has indeed handed a valid file-driver to close because that information is wiped out prematurely. Solution: Moved the public information part cleaning after it is closed. H5FDmpio.c: Added in a bunch of assertion to make sure the file handle is indeed an MPIO file. Platforms tested: IRIX64 -64 parallel
-rw-r--r--src/H5FD.c2
-rw-r--r--src/H5FDmpio.c36
2 files changed, 33 insertions, 5 deletions
diff --git a/src/H5FD.c b/src/H5FD.c
index 5b27f9d..25a7c25 100644
--- a/src/H5FD.c
+++ b/src/H5FD.c
@@ -904,7 +904,6 @@ H5FD_close(H5FD_t *file)
/* Prepare to close file by clearing all public fields */
driver = file->cls;
H5I_dec_ref(file->driver_id);
- HDmemset(file, 0, sizeof(H5FD_t));
/*
* Dispatch to the driver for actual close. If the driver fails to
@@ -914,6 +913,7 @@ H5FD_close(H5FD_t *file)
if ((driver->close)(file)<0) {
HRETURN_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "close failed");
}
+ HDmemset(file, 0, sizeof(H5FD_t));
FUNC_LEAVE(SUCCEED);
}
diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c
index 1e9bd8f..2d85a23 100644
--- a/src/H5FDmpio.c
+++ b/src/H5FDmpio.c
@@ -462,6 +462,8 @@ H5FD_mpio_communicator(H5FD_t *_file)
H5FD_mpio_t *file = (H5FD_mpio_t*)_file;
FUNC_ENTER(H5FD_mpio_communicator, NULL);
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
FUNC_LEAVE(file->comm);
}
@@ -494,6 +496,8 @@ H5FD_mpio_setup(H5FD_t *_file, MPI_Datatype btype, MPI_Datatype ftype,
H5FD_mpio_t *file = (H5FD_mpio_t*)_file;
FUNC_ENTER(H5FD_mpio_setup, FAIL);
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
file->btype = btype;
file->ftype = ftype;
@@ -534,13 +538,16 @@ herr_t
H5FD_mpio_wait_for_left_neighbor(H5FD_t *_file)
{
H5FD_mpio_t *file = (H5FD_mpio_t*)_file;
- MPI_Comm comm = file->comm;
+ MPI_Comm comm;
char msgbuf[1];
int myid;
MPI_Status rcvstat;
FUNC_ENTER(H5FD_mpio_wait_for_left_neighbor, FAIL);
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
+ comm = file->comm;
if (MPI_SUCCESS!= MPI_Comm_rank(comm, &myid))
HRETURN_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_Comm_rank failed");
@@ -584,12 +591,15 @@ herr_t
H5FD_mpio_signal_right_neighbor(H5FD_t *_file)
{
H5FD_mpio_t *file = (H5FD_mpio_t*)_file;
- MPI_Comm comm = file->comm;
+ MPI_Comm comm;
char msgbuf[1];
int myid, numprocs;
FUNC_ENTER(H5FD_mpio_signal_right_neighbor, FAIL);
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
+ comm = file->comm;
if (MPI_SUCCESS!= MPI_Comm_size( comm, &numprocs ))
HRETURN_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_Comm_size failed");
if (MPI_SUCCESS!= MPI_Comm_rank( comm, &myid ))
@@ -627,6 +637,8 @@ H5FD_mpio_fapl_get(H5FD_t *_file)
H5FD_mpio_fapl_t *fa = NULL;
FUNC_ENTER(H5FD_mpio_fapl_get, NULL);
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
if (NULL==(fa=H5MM_calloc(sizeof(H5FD_mpio_fapl_t))))
HRETURN_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
@@ -846,6 +858,8 @@ H5FD_mpio_close(H5FD_t *_file)
if (H5FD_mpio_Debug[(int)'t'])
fprintf(stdout, "Entering H5FD_mpio_close\n");
#endif
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
/* MPI_File_close sets argument to MPI_FILE_NULL */
if (MPI_SUCCESS != MPI_File_close(&(file->f)/*in,out*/))
@@ -881,12 +895,14 @@ H5FD_mpio_close(H5FD_t *_file)
*-------------------------------------------------------------------------
*/
static herr_t
-H5FD_mpio_query(const H5FD_t *_f, unsigned long *flags /* out */)
+H5FD_mpio_query(const H5FD_t *_file, unsigned long *flags /* out */)
{
- const H5FD_mpio_t *f = (const H5FD_mpio_t*)_f;
+ const H5FD_mpio_t *file = (const H5FD_mpio_t*)_file;
herr_t ret_value=SUCCEED;
FUNC_ENTER(H5FD_mpio_query, FAIL);
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
/* Set the VFL feature flags that this driver supports */
if(flags) {
@@ -921,6 +937,8 @@ H5FD_mpio_get_eoa(H5FD_t *_file)
H5FD_mpio_t *file = (H5FD_mpio_t*)_file;
FUNC_ENTER(H5FD_mpio_get_eoa, HADDR_UNDEF);
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
FUNC_LEAVE(file->eoa);
}
@@ -950,6 +968,8 @@ H5FD_mpio_set_eoa(H5FD_t *_file, haddr_t addr)
H5FD_mpio_t *file = (H5FD_mpio_t*)_file;
FUNC_ENTER(H5FD_mpio_set_eoa, FAIL);
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
file->eoa = addr;
@@ -988,6 +1008,8 @@ H5FD_mpio_get_eof(H5FD_t *_file)
H5FD_mpio_t *file = (H5FD_mpio_t*)_file;
FUNC_ENTER(H5FD_mpio_get_eof, HADDR_UNDEF);
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
FUNC_LEAVE(file->eof);
}
@@ -1059,6 +1081,8 @@ H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id, haddr_t add
if (H5FD_mpio_Debug[(int)'t'])
fprintf(stdout, "Entering H5FD_mpio_read\n" );
#endif
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
/* some numeric conversions */
if (haddr_to_MPIOff(addr, &mpi_off/*out*/)<0)
@@ -1297,6 +1321,8 @@ H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id/*unused*/,
if (H5FD_mpio_Debug[(int)'t'])
fprintf(stdout, "Entering H5FD_mpio_write\n" );
#endif
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
/* some numeric conversions */
if (haddr_to_MPIOff(addr, &mpi_off)<0)
@@ -1469,6 +1495,8 @@ H5FD_mpio_flush(H5FD_t *_file)
if (H5FD_mpio_Debug[(int)'t'])
fprintf(stdout, "Entering H5FD_mpio_flush\n" );
#endif
+ assert(file);
+ assert(H5FD_MPIO==file->pub.driver_id);
if (MPI_SUCCESS != MPI_File_sync(file->f))
HRETURN_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "MPI_File_sync failed");