diff --git a/src/aiori-HDF5.c b/src/aiori-HDF5.c index 5d629e1..5c0f139 100755 --- a/src/aiori-HDF5.c +++ b/src/aiori-HDF5.c @@ -89,7 +89,7 @@ static IOR_offset_t HDF5_Xfer(int, void *, IOR_size_t *, IOR_offset_t, IOR_param_t *); static void HDF5_Close(void *, IOR_param_t *); static void HDF5_Delete(char *, IOR_param_t *); -static void HDF5_SetVersion(IOR_param_t *); +static char* HDF5_GetVersion(); static void HDF5_Fsync(void *, IOR_param_t *); static IOR_offset_t HDF5_GetFileSize(IOR_param_t *, MPI_Comm, char *); static int HDF5_Access(const char *, int, IOR_param_t *); @@ -103,7 +103,7 @@ ior_aiori_t hdf5_aiori = { .xfer = HDF5_Xfer, .close = HDF5_Close, .delete = HDF5_Delete, - .set_version = HDF5_SetVersion, + .get_version = HDF5_GetVersion, .fsync = HDF5_Fsync, .get_file_size = HDF5_GetFileSize, .statfs = aiori_posix_statfs, @@ -447,20 +447,23 @@ static void HDF5_Delete(char *testFileName, IOR_param_t * param) /* * Determine api version. */ -static void HDF5_SetVersion(IOR_param_t * test) +static char * HDF5_GetVersion() { + static char version[1024] = {0}; + if(version[0]) return version; + unsigned major, minor, release; if (H5get_libversion(&major, &minor, &release) < 0) { WARN("cannot get HDF5 library version"); } else { - sprintf(test->apiVersion, "%s-%u.%u.%u", - test->api, major, minor, release); + sprintf(version, "%u.%u.%u", major, minor, release); } #ifndef H5_HAVE_PARALLEL - strcat(test->apiVersion, " (Serial)"); + strcat(version, " (Serial)"); #else /* H5_HAVE_PARALLEL */ - strcat(test->apiVersion, " (Parallel)"); + strcat(version, " (Parallel)"); #endif /* not H5_HAVE_PARALLEL */ + return version; } /* diff --git a/src/aiori-S3.c b/src/aiori-S3.c index 4836dd1..326b5bc 100755 --- a/src/aiori-S3.c +++ b/src/aiori-S3.c @@ -213,11 +213,8 @@ ior_aiori_t s3_emc_aiori = { .finalize = S3_finalize }; -static int is_initialized = FALSE; static void S3_init(){ - if (is_initialized) return; - is_initialized = TRUE; /* This is supposed to be done before *any* threads are created. * Could MPI_Init() create threads (or call multi-threaded * libraries)? We'll assume so. */ @@ -225,8 +222,6 @@ static void S3_init(){ } static void S3_finalize(){ - if (! is_initialized) return; - is_initialized = FALSE; /* done once per program, after exiting all threads. * NOTE: This fn doesn't return a value that can be checked for success. */ aws_cleanup(); diff --git a/src/aiori.c b/src/aiori.c index 8ec7130..b886487 100644 --- a/src/aiori.c +++ b/src/aiori.c @@ -117,7 +117,12 @@ char* aiori_get_version() return ""; } +static int is_initialized = FALSE; + void aiori_initialize(){ + if (is_initialized) return; + is_initialized = TRUE; + /* Sanity check, we were compiled with SOME backend, right? */ if (0 == aiori_count ()) { ERR("No IO backends compiled into aiori. " @@ -132,6 +137,9 @@ void aiori_initialize(){ } void aiori_finalize(){ + if (! is_initialized) return; + is_initialized = FALSE; + for (ior_aiori_t **tmp = available_aiori ; *tmp != NULL; ++tmp) { if((*tmp)->finalize){ (*tmp)->finalize();