diff --git a/include/event2/event.h b/include/event2/event.h index 4b05b32538..f71d0844c6 100644 --- a/include/event2/event.h +++ b/include/event2/event.h @@ -313,6 +313,22 @@ void event_set_log_callback(event_log_cb cb); typedef void (*event_fatal_cb)(int err); void event_set_fatal_callback(event_fatal_cb cb); +#define EVENT_DBG_ALL 0xffffffffu + +/** + Turn on debugging logs and have them sent to the default log handler. + + This is a global setting; you must call this before any calls that create an + event-base. + + Debug logs are verbose. + + @param which Controls which debug messages are turned on. This option is + unused for now; for forward compatibility, you must pass in the constant + "EVENT_DBG_ALL" + */ +void event_enable_debug_logging(ev_uint32_t which); + /** Associate a different event base with an event. diff --git a/log-internal.h b/log-internal.h index c1905aea34..e3c6d564a3 100644 --- a/log-internal.h +++ b/log-internal.h @@ -39,6 +39,23 @@ #define _EVENT_ERR_ABORT ((int)0xdeaddead) +#define USE_GLOBAL_FOR_DEBUG_LOGGING + +#if !defined(_EVENT_DISABLE_DEBUG_MODE) || defined(USE_DEBUG) +#define EVENT_DEBUG_LOGGING_ENABLED +#endif + +#ifdef EVENT_DEBUG_LOGGING_ENABLED +#ifdef USE_GLOBAL_FOR_DEBUG_LOGGING +extern ev_uint32_t _event_debug_logging_mask; +#define _event_debug_get_logging_mask() (_event_debug_logging_mask) +#else +ev_uint32_t _event_debug_get_logging_mask(void); +#endif +#else +#define _event_debug_get_logging_mask() (0) +#endif + void event_err(int eval, const char *fmt, ...) EV_CHECK_FMT(2,3) EV_NORETURN; void event_warn(const char *fmt, ...) EV_CHECK_FMT(1,2); void event_sock_err(int eval, evutil_socket_t sock, const char *fmt, ...) EV_CHECK_FMT(3,4) EV_NORETURN; @@ -48,10 +65,14 @@ void event_warnx(const char *fmt, ...) EV_CHECK_FMT(1,2); void event_msgx(const char *fmt, ...) EV_CHECK_FMT(1,2); void _event_debugx(const char *fmt, ...) EV_CHECK_FMT(1,2); -#ifdef USE_DEBUG -#define event_debug(x) _event_debugx x +#ifdef EVENT_DEBUG_LOGGING_ENABLED +#define event_debug(x) do { \ + if (_event_debug_get_logging_mask()) { \ + _event_debugx x; \ + } \ + } while (0) #else -#define event_debug(x) do {;} while (0) +#define event_debug(x) ((void)0) #endif #undef EV_CHECK_FMT diff --git a/log.c b/log.c index f0cd4320d1..79eaae711f 100644 --- a/log.c +++ b/log.c @@ -63,6 +63,25 @@ static void event_exit(int errcode) EV_NORETURN; static event_fatal_cb fatal_fn = NULL; +#ifdef EVENT_DEBUG_LOGGING_ENABLED +#ifdef USE_DEBUG +#define DEFAULT_MASK EVENT_DBG_ALL +#else +#define DEFAULT_MASK 0 +#endif + +#ifdef USE_GLOBAL_FOR_DEBUG_LOGGING +ev_uint32_t _event_debug_logging_mask = DEFAULT_MASK; +#else +static ev_uint32_t _event_debug_logging_mask = DEFAULT_MASK; +ev_uint32_t +_event_debug_get_logging_mask(void) +{ + return _event_debug_logging_mask; +} +#endif +#endif /* EVENT_DEBUG_LOGGING_ENABLED */ + void event_set_fatal_callback(event_fatal_cb cb) {