summaryrefslogtreecommitdiffstats
path: root/src/H5private.h
diff options
context:
space:
mode:
authorRobb Matzke <matzke@llnl.gov>1998-01-28 21:43:08 (GMT)
committerRobb Matzke <matzke@llnl.gov>1998-01-28 21:43:08 (GMT)
commitd4a3224c0fde991cdf65392aeeae326c46406121 (patch)
tree462dea6a59f895530173943dcf18930916868a8b /src/H5private.h
parentc131a549dc1a9c8456d8cf0e44a56187dae1c268 (diff)
downloadhdf5-d4a3224c0fde991cdf65392aeeae326c46406121.zip
hdf5-d4a3224c0fde991cdf65392aeeae326c46406121.tar.gz
hdf5-d4a3224c0fde991cdf65392aeeae326c46406121.tar.bz2
[svn-r193] Changes since 19980128
---------------------- ./MANIFEST Added new config files. ./src/H5private.h Changed FUNC_ENTER() so it calls H5Eclear() for all API functions but not for any private functions. It also prints the names of all API functions on file 55 (just for the prototype) so we can get a list of API functions called with the Bourne shell commands like: ./testhdf5 55>api_list or ./testhdf5 55>&1 1>/dev/null 2>&1 | less Otherwise the names are silently discarded. ./src/H5.c ./src/H5C.c ./src/H5D.c ./src/H5F.c ./src/H5G.c ./src/H5M.c ./src/H5P.c ./src/H5T.c Removed `H5ECLEAR' from lots of places in the source code. ./src/H5E.c ./src/H5Eprivate.h Recursion is a problem here, so to disable a call to H5Eclear() from FUNC_ENTER just define a local variable like this before you call FUNC_ENTER: const H5E_clearable_g = FALSE; Unfortunately this results in a warning: declaration of `H5E_clearable_g' shadows global declaration. Good thing it's only used in two places.
Diffstat (limited to 'src/H5private.h')
-rw-r--r--src/H5private.h75
1 files changed, 45 insertions, 30 deletions
diff --git a/src/H5private.h b/src/H5private.h
index 9fa402e..995b53d 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -422,38 +422,53 @@ extern char *strdup(const char *s);
extern hbool_t library_initialize_g; /*good thing C's lazy about extern! */
extern hbool_t thread_initialize_g; /*don't decl interface_initialize_g */
+#define PRINT(N,S) { \
+ write ((N), (S), strlen((S))); \
+ write ((N), "\n", 1); \
+}
+
#define FUNC_ENTER(func_name,err) FUNC_ENTER_INIT(func_name,INTERFACE_INIT,err)
-#define FUNC_ENTER_INIT(func_name,interface_init_func,err) { \
- CONSTR (FUNC, #func_name); \
- PABLO_SAVE (ID_ ## func_name); \
- \
- PABLO_TRACE_ON (PABLO_MASK, pablo_func_id); \
- \
- if (!library_initialize_g) { \
- library_initialize_g = TRUE; \
- if (H5_init_library()<0) { \
- HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \
- "library initialization failed"); \
- } \
- } \
- \
- if (!thread_initialize_g) { \
- thread_initialize_g = TRUE; \
- if (H5_init_thread()<0) { \
- HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \
- "thread initialization failed"); \
- } \
- } \
- \
- if (!interface_initialize_g) { \
- interface_initialize_g = TRUE; \
- if (interface_init_func && \
- ((herr_t(*)(void))interface_init_func)()<0) { \
- HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \
- "interface initialization failed"); \
- } \
- } \
+#define FUNC_ENTER_INIT(func_name,interface_init_func,err) { \
+ CONSTR (FUNC, #func_name); \
+ PABLO_SAVE (ID_ ## func_name); \
+ \
+ PABLO_TRACE_ON (PABLO_MASK, pablo_func_id); \
+ \
+ /* Initialize the library */ \
+ if (!library_initialize_g) { \
+ library_initialize_g = TRUE; \
+ if (H5_init_library()<0) { \
+ HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \
+ "library initialization failed"); \
+ } \
+ } \
+ \
+ /* Initialize this thread */ \
+ if (!thread_initialize_g) { \
+ thread_initialize_g = TRUE; \
+ if (H5_init_thread()<0) { \
+ HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \
+ "thread initialization failed"); \
+ } \
+ } \
+ \
+ /* Initialize this interface */ \
+ if (!interface_initialize_g) { \
+ interface_initialize_g = TRUE; \
+ if (interface_init_func && \
+ ((herr_t(*)(void))interface_init_func)()<0) { \
+ HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \
+ "interface initialization failed"); \
+ } \
+ } \
+ \
+ /* Clear thread error stack entering public functions */ \
+ if (H5E_clearable_g && '_'!=#func_name[2] && '_'!=#func_name[3] && \
+ (!#func_name[4] || '_'!=#func_name[4])) { \
+ PRINT (55, #func_name); \
+ H5Eclear (H5E_thrdid_g); \
+ } \
{
/*-------------------------------------------------------------------------