libs: add api to enable immediate output of zlog

The log module buffers outgoing messages by default; add an
api to turn that off, and emit messages immediately.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
This commit is contained in:
Mark Stapp 2021-03-24 13:57:11 -04:00
parent 7408af70f5
commit 42ddefe816
2 changed files with 17 additions and 1 deletions

View File

@ -81,6 +81,11 @@ static gid_t zlog_gid = -1;
DECLARE_ATOMLIST(zlog_targets, struct zlog_target, head);
static struct zlog_targets_head zlog_targets;
/* Global setting for buffered vs immediate output. The default is
* per-pthread buffering.
*/
static bool default_immediate;
/* cf. zlog.h for additional comments on this struct.
*
* Note: you MUST NOT pass the format string + va_list to non-FRR format
@ -395,7 +400,7 @@ static void vzlog_tls(struct zlog_tls *zlog_tls, const struct xref_logmsg *xref,
struct zlog_msg *msg;
char *buf;
bool ignoremsg = true;
bool immediate = false;
bool immediate = default_immediate;
/* avoid further processing cost if no target wants this message */
rcu_read_lock();
@ -714,6 +719,14 @@ struct zlog_target *zlog_target_replace(struct zlog_target *oldzt,
return oldzt;
}
/*
* Enable or disable 'immediate' output - default is to buffer
* each pthread's messages.
*/
void zlog_set_immediate(bool set_p)
{
default_immediate = set_p;
}
/* common init */

View File

@ -249,6 +249,9 @@ extern void zlog_tls_buffer_init(void);
extern void zlog_tls_buffer_flush(void);
extern void zlog_tls_buffer_fini(void);
/* Enable or disable 'immediate' output - default is to buffer messages. */
extern void zlog_set_immediate(bool set_p);
#ifdef __cplusplus
}
#endif