diff options
author | Robb Matzke <matzke@llnl.gov> | 1999-03-30 11:38:34 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1999-03-30 11:38:34 (GMT) |
commit | f003dead4d1701aedd7833354ede73c6eb93a971 (patch) | |
tree | e64999eb9d666aedd808f1c91f4a2be8676d6881 /src/H5F.c | |
parent | 804fae33ced79c63a2c7fa2adc8537c80597fb33 (diff) | |
download | hdf5-f003dead4d1701aedd7833354ede73c6eb93a971.zip hdf5-f003dead4d1701aedd7833354ede73c6eb93a971.tar.gz hdf5-f003dead4d1701aedd7833354ede73c6eb93a971.tar.bz2 |
[svn-r1169] ./configure.in
./configure [REGENERATED]
./src/H5D.c
./src/H5O.c
Removed H5AC, H5B, and H5T from the default list of packages
to debug (because they're pretty expensive debugging), and
added H5O. Also fixed a bug for undefined variable in H5D when
H5S debugging is turned on but H5T debugging is turned off.
./config/conclude.in
Fixed installation of header files for building in a directory
other than the source directory. This fixes a bug where
H5config.h wasn't being installed.
./src/H5.c
./src/H5A.c
./src/H5D.c
./src/H5F.c
./src/H5G.c
./src/H5I.c
./src/H5Iprivate.h
./src/H5P.c
./src/H5R.c
./src/H5RA.c
./src/H5S.c
./src/H5T.c
./src/H5TB.c
./src/H5Tprivate.h
./src/H5Z.c
./src/H5detect.c
./src/H5private.h
Changed the way the library shuts down again. Now it handles
cycles between packages and isn't so sensitive to dependencies
between packages. A package might shut down only to be
restarted to process a request from some other package being
shut down. Loops are detected after 100 iteractions and the
shutdown is aborted with a message on standard error. This
also makes it a lot easier to debug.
./src/H5A.c
Fixed H5A_write() and H5A_read() so they pass a non-null
background buffer to the conversion functions. This is
necessary when an attribute has a compound data type.
./src/H5Flow.c
./src/H5Fprivate.h
./src/H5Fsec2.c
Reindented new Win32 stuff.
./src/H5Odtype.c
Fixed a bug when enumeration types are used in a compound data
type. The byte pointer wasn't incremented after the type
information was written.
./tools/h5ls.c
Compound data types display their total size because it's not
always obvious from looking at the members.
Scalar attributes show their space as `scalar' instead of
`{}'.
The index value is not printed for attributes that have only a
few values. Instead the word `Data:' is printed on the first
line of attribute data.
Named types display their data type only if verbose output was
requested.
Diffstat (limited to 'src/H5F.c')
-rw-r--r-- | src/H5F.c | 65 |
1 files changed, 27 insertions, 38 deletions
@@ -212,9 +212,11 @@ H5F_init_interface(void) * variables to their initial values. Release all ID groups * associated with this interface. * - * Return: Success: + * Return: Success: Positive if anything was done that might + * have affected other interfaces; zero + * otherwise. * - * Failure: + * Failure: Never fails. * * Programmer: Robb Matzke * Friday, February 19, 1999 @@ -223,14 +225,22 @@ H5F_init_interface(void) * *------------------------------------------------------------------------- */ -void -H5F_term_interface(intn status) +intn +H5F_term_interface(void) { - if (interface_initialize_g>0) { - H5I_destroy_group(H5I_FILE); - H5I_destroy_group(H5I_FILE_CLOSING); + intn n = 0; + + if (interface_initialize_g) { + if ((n=H5I_nmembers(H5I_FILE))) { + H5F_close_all(); + } else if (0==(n=H5I_nmembers(H5I_FILE_CLOSING))) { + H5I_destroy_group(H5I_FILE); + H5I_destroy_group(H5I_FILE_CLOSING); + interface_initialize_g = 0; + n = 1; /*H5I*/ + } } - interface_initialize_g = status; + return n; } @@ -287,7 +297,9 @@ H5F_flush_all(hbool_t invalidate) /*------------------------------------------------------------------------- * Function: H5F_close_all * - * Purpose: Close all open files. + * Purpose: Close all open files. Any file which has open object headers + * will be moved from the H5I_FILE group to the H5I_FILE_CLOSING + * group. * * Return: Success: Non-negative * @@ -304,26 +316,7 @@ herr_t H5F_close_all(void) { FUNC_ENTER(H5F_close_all, FAIL); - - /* - * Close all normally open files. Any file which has open object headers - * will be moved to the H5I_FILE_CLOSING ID group. - */ - if (H5I_destroy_group(H5I_FILE)<0) { - HRETURN_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, - "unable to destroy H5I_FILE ID group"); - } - - /* - * Recreate the H5I_FILE group just in case someone wants to open or - * create another file later. - */ - if (H5I_init_group(H5I_FILE, H5I_FILEID_HASHSIZE, 0, - (H5I_free_t)H5F_close)<0) { - HRETURN_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, - "unable to recreate H5I_FILE ID group"); - } - + H5I_clear_group(H5I_FILE); FUNC_LEAVE(SUCCEED); } @@ -788,7 +781,6 @@ H5F_dest(H5F_t *f) */ --f->nrefs; } - FUNC_LEAVE(ret_value); } @@ -954,7 +946,6 @@ H5F_open(const char *name, uintn flags, HRETURN_ERROR(H5E_FILE, H5E_WRITEERROR, NULL, "file is not writable"); } - if ((old = H5I_search(H5I_FILE, H5F_compare_files, &search)) || (old = H5I_search(H5I_FILE_CLOSING, H5F_compare_files, &search))) { if (flags & H5F_ACC_TRUNC) { @@ -975,9 +966,7 @@ H5F_open(const char *name, uintn flags, } f = H5F_new(old->shared, NULL, NULL); - } - - else if (flags & H5F_ACC_TRUNC) { + } else if (flags & H5F_ACC_TRUNC) { /* Truncate existing file */ if (0 == (flags & H5F_ACC_RDWR)) { HRETURN_ERROR(H5E_FILE, H5E_BADVALUE, NULL, @@ -1817,12 +1806,12 @@ H5F_close(H5F_t *f) } } #ifdef WIN32 - /*free up the memory for path*/ + /*free up the memory for path*/ - free(f->shared->key.path); + free(f->shared->key.path); #endif - - /* + + /* * Destroy the H5F_t struct and decrement the reference count for the * shared H5F_file_t struct. If the reference count for the H5F_file_t * struct reaches zero then destroy it also. |