summaryrefslogtreecommitdiffstats
path: root/src/hlog.h
diff options
context:
space:
mode:
authorDavid Young <dyoung@hdfgroup.org>2020-02-11 16:52:48 (GMT)
committerDavid Young <dyoung@hdfgroup.org>2020-02-12 19:28:33 (GMT)
commit2b7347d5773fc91475ce6a18e0e96b40f0b8cb94 (patch)
tree5c7bed08103ef343d70f3fecb83f7fe3fe4e109a /src/hlog.h
parenta3e6c35b2d90864b6a561daf58564ad999daac6f (diff)
downloadhdf5-2b7347d5773fc91475ce6a18e0e96b40f0b8cb94.zip
hdf5-2b7347d5773fc91475ce6a18e0e96b40f0b8cb94.tar.gz
hdf5-2b7347d5773fc91475ce6a18e0e96b40f0b8cb94.tar.bz2
Record the state of a log outlet on first use and reuse that state on
subsequent hlog_fast() calls. While I'm here, add a typedef, hlog_outlet_t, for struct hlog_outlet, and use it.
Diffstat (limited to 'src/hlog.h')
-rw-r--r--src/hlog.h13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/hlog.h b/src/hlog.h
index 2ac64d0..921ce64 100644
--- a/src/hlog.h
+++ b/src/hlog.h
@@ -53,6 +53,8 @@ struct hlog_outlet {
TAILQ_ENTRY(hlog_outlet) ls_next;
};
+typedef struct hlog_outlet hlog_outlet_t;
+
#define HLOG_CONSTRUCTOR(__sym) \
void hlog_constructor_##__sym(void) __constructor; \
void \
@@ -94,9 +96,14 @@ HLOG_OUTLET_DECL(all);
#define hlog_fast(_name, ...) \
do { \
- struct hlog_outlet *_ls; \
- if ((_ls = hlog_outlet_find_active((&log_##_name))) != NULL) \
- hlog_always((_ls), __VA_ARGS__); \
+ hlog_outlet_t *_ls0 = &log_##_name; \
+ \
+ if (_ls0->ls_resolved == HLOG_OUTLET_S_OFF) \
+ break; \
+ else if (_ls0->ls_resolved == HLOG_OUTLET_S_ON) \
+ hlog_always(_ls0, __VA_ARGS__); \
+ else \
+ hlog_impl(_ls0, __VA_ARGS__); \
} while (/*CONSTCOND*/0)
struct hlog_outlet *hlog_outlet_find_active(struct hlog_outlet *);