tevent_set_debug: int (struct tevent_context *, void (*)(void *, enum tevent_debug_level, const char *, va_list), void *)
tevent_set_debug_stderr: int (struct tevent_context *)
tevent_set_default_backend: void (const char *)
+tevent_set_max_debug_level: enum tevent_debug_level (struct tevent_context *, enum tevent_debug_level)
tevent_set_trace_callback: void (struct tevent_context *, tevent_trace_callback_t, void *)
tevent_set_trace_fd_callback: void (struct tevent_context *, tevent_trace_fd_callback_t, void *)
tevent_set_trace_immediate_callback: void (struct tevent_context *, tevent_trace_immediate_callback_t, void *)
/**
* Set destination for tevent debug messages
*
+ * As of version 0.15.0 the invocation of
+ * the debug function for indiviual messages
+ * is limited by the current max_debug_level,
+ * which means TEVENT_DEBUG_TRACE messages
+ * are not passed by default:
+ *
+ * - tevent_set_debug() with debug == NULL implies
+ * tevent_set_max_debug_level(ev, TEVENT_DEBUG_FATAL).
+ *
+ * - tevent_set_debug() with debug != NULL implies
+ * tevent_set_max_debug_level(ev, TEVENT_DEBUG_WARNING).
+ *
* @param[in] ev Event context to debug
* @param[in] debug Function to handle output printing
* @param[in] context The context to pass to the debug function.
* @return Always returns 0 as of version 0.9.8
*
* @note Default is to emit no debug messages
+ *
+ * @see tevent_set_max_debug_level()
*/
int tevent_set_debug(struct tevent_context *ev,
tevent_debug_fn debug,
void *context);
+/**
+ * Set maximum debug level for tevent debug messages
+ *
+ * @param[in] ev Event context to debug
+ * @param[in] max_level Function to handle output printing
+ *
+ * @return The former max level is returned.
+ *
+ * @see tevent_set_debug()
+ *
+ * @note Available as of tevent 0.15.0
+ */
+enum tevent_debug_level
+tevent_set_max_debug_level(struct tevent_context *ev,
+ enum tevent_debug_level max_level);
+
/**
* Designate stderr for debug message output
*
errno = EINVAL;
return -1;
}
-
+ if (debug != NULL) {
+ /*
+ * tevent_set_max_debug_level(ev, TEVENT_DEBUG_TRACE)
+ * can be used to get full tracing, but we can to
+ * avoid overhead by default.
+ */
+ ev->debug_ops.max_level = TEVENT_DEBUG_WARNING;
+ } else {
+ ev->debug_ops.max_level = TEVENT_DEBUG_FATAL;
+ }
ev->debug_ops.debug = debug;
ev->debug_ops.context = context;
return 0;
}
+enum tevent_debug_level
+tevent_set_max_debug_level(struct tevent_context *ev,
+ enum tevent_debug_level max_level)
+{
+ enum tevent_debug_level old_level;
+ old_level = ev->debug_ops.max_level;
+ ev->debug_ops.max_level = max_level;
+ return old_level;
+}
+
/*
debug function for ev_set_debug_stderr
*/
if (ev->wrapper.glue != NULL) {
ev = tevent_wrapper_main_ev(ev);
}
+ if (level > ev->debug_ops.max_level) {
+ return;
+ }
if (ev->debug_ops.debug == NULL) {
return;
}
};
struct tevent_debug_ops {
+ enum tevent_debug_level max_level;
void (*debug)(void *context, enum tevent_debug_level level,
const char *fmt, va_list ap) PRINTF_ATTRIBUTE(3,0);
void *context;