Skip to content

Commit

Permalink
util: Avoid an extern variable by using sss_chain_id_get()
Browse files Browse the repository at this point in the history
Signed-off-by: Andreas Schneider <asn@redhat.com>
  • Loading branch information
cryptomilk committed Aug 4, 2021
1 parent f546088 commit 59958cd
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 41 deletions.
19 changes: 16 additions & 3 deletions src/util/debug.c
Expand Up @@ -35,6 +35,7 @@
#endif

#include "util/util.h"
#include "util/sss_chain_id.h"

/* from debug_backtrace.h */
void sss_debug_backtrace_init(void);
Expand All @@ -50,7 +51,7 @@ int debug_microseconds = SSSDBG_MICROSECONDS_UNRESOLVED;
enum sss_logger_t sss_logger = STDERR_LOGGER;
const char *debug_log_file = "sssd";
FILE *_sss_debug_file;
uint64_t debug_chain_id;
static uint64_t debug_chain_id;

const char *sss_logger_str[] = {
[STDERR_LOGGER] = "stderr",
Expand Down Expand Up @@ -324,8 +325,8 @@ void sss_vdebug_fn(const char *file,
sss_debug_backtrace_printf(level, "[%s] [%s] (%#.4x): ",
debug_prg_name, function, level);

if (debug_chain_id > 0) {
sss_debug_backtrace_printf(level, "[RID#%lu] ", debug_chain_id);
if (sss_chain_id_get() > 0) {
sss_debug_backtrace_printf(level, "[RID#%lu] ", sss_chain_id_get());
}

sss_debug_backtrace_vprintf(level, format, ap);
Expand Down Expand Up @@ -489,3 +490,15 @@ void _sss_talloc_log_fn(const char *message)
{
DEBUG(SSSDBG_FATAL_FAILURE, "%s\n", message);
}

uint64_t sss_chain_id_set(uint64_t id)
{
uint64_t old_id = debug_chain_id;
debug_chain_id = id;
return old_id;
}

uint64_t sss_chain_id_get(void)
{
return debug_chain_id;
}
6 changes: 6 additions & 0 deletions src/util/debug.h
Expand Up @@ -181,6 +181,12 @@ void sss_debug_fn(const char *file,
int level,
const char *format, ...) SSS_ATTRIBUTE_PRINTF(5, 6);

/* Explicitly set new chain id. The old id is returned. */
uint64_t sss_chain_id_set(uint64_t id);

/* Get the current chain id. */
uint64_t sss_chain_id_get(void);

#define APPEND_LINE_FEED 0x1 /* can be used as a sss_vdebug_fn() flag */

/* Checks whether level is set in generic debug_level.
Expand Down
41 changes: 9 additions & 32 deletions src/util/sss_chain_id.c
Expand Up @@ -23,7 +23,6 @@
#include <tevent.h>

#ifdef BUILD_CHAIN_ID
extern uint64_t debug_chain_id;

static void sss_chain_id_trace_fde(struct tevent_fd *fde,
enum tevent_event_trace_point point,
Expand All @@ -32,11 +31,11 @@ static void sss_chain_id_trace_fde(struct tevent_fd *fde,
switch (point) {
case TEVENT_EVENT_TRACE_ATTACH:
/* Assign the current chain id when the event is created. */
tevent_fd_set_tag(fde, debug_chain_id);
tevent_fd_set_tag(fde, sss_chain_id_get());
break;
case TEVENT_EVENT_TRACE_BEFORE_HANDLER:
/* Set the chain id when a handler is being called. */
debug_chain_id = tevent_fd_get_tag(fde);
sss_chain_id_set(tevent_fd_get_tag(fde));
break;
default:
/* Do nothing. */
Expand All @@ -51,11 +50,11 @@ static void sss_chain_id_trace_signal(struct tevent_signal *se,
switch (point) {
case TEVENT_EVENT_TRACE_ATTACH:
/* Assign the current chain id when the event is created. */
tevent_signal_set_tag(se, debug_chain_id);
tevent_signal_set_tag(se, sss_chain_id_get());
break;
case TEVENT_EVENT_TRACE_BEFORE_HANDLER:
/* Set the chain id when a handler is being called. */
debug_chain_id = tevent_signal_get_tag(se);
sss_chain_id_set(tevent_signal_get_tag(se));
break;
default:
/* Do nothing. */
Expand All @@ -70,11 +69,11 @@ static void sss_chain_id_trace_timer(struct tevent_timer *timer,
switch (point) {
case TEVENT_EVENT_TRACE_ATTACH:
/* Assign the current chain id when the event is created. */
tevent_timer_set_tag(timer, debug_chain_id);
tevent_timer_set_tag(timer, sss_chain_id_get());
break;
case TEVENT_EVENT_TRACE_BEFORE_HANDLER:
/* Set the chain id when a handler is being called. */
debug_chain_id = tevent_timer_get_tag(timer);
sss_chain_id_set(tevent_timer_get_tag(timer));
break;
default:
/* Do nothing. */
Expand All @@ -89,11 +88,11 @@ static void sss_chain_id_trace_immediate(struct tevent_immediate *im,
switch (point) {
case TEVENT_EVENT_TRACE_ATTACH:
/* Assign the current chain id when the event is created. */
tevent_immediate_set_tag(im, debug_chain_id);
tevent_immediate_set_tag(im, sss_chain_id_get());
break;
case TEVENT_EVENT_TRACE_BEFORE_HANDLER:
/* Set the chain id when a handler is being called. */
debug_chain_id = tevent_immediate_get_tag(im);
sss_chain_id_set(tevent_immediate_get_tag(im));
break;
default:
/* Do nothing. */
Expand All @@ -111,7 +110,7 @@ static void sss_chain_id_trace_loop(enum tevent_trace_point point,
* after the event handler was finished, we need to restore chain
* id to 0 (out of request).
*/
debug_chain_id = 0;
sss_chain_id_set(0);
break;
default:
/* Do nothing. */
Expand All @@ -128,33 +127,11 @@ void sss_chain_id_setup(struct tevent_context *ev)
tevent_set_trace_immediate_callback(ev, sss_chain_id_trace_immediate, NULL);
}

uint64_t sss_chain_id_set(uint64_t id)
{
uint64_t old_id = debug_chain_id;
debug_chain_id = id;
return old_id;
}

uint64_t sss_chain_id_get(void)
{
return debug_chain_id;
}

#else /* BUILD_CHAIN_ID not defined */

void sss_chain_id_setup(struct tevent_context *ev)
{
return;
}

uint64_t sss_chain_id_set(uint64_t id)
{
return 0;
}

uint64_t sss_chain_id_get(void)
{
return 0;
}

#endif /* BUILD_CHAIN_ID */
6 changes: 0 additions & 6 deletions src/util/sss_chain_id.h
Expand Up @@ -26,10 +26,4 @@
/* Setup chain id tracking on tevent context. */
void sss_chain_id_setup(struct tevent_context *ev);

/* Explicitly set new chain id. The old id is returned. */
uint64_t sss_chain_id_set(uint64_t id);

/* Get the current chain id. */
uint64_t sss_chain_id_get(void);

#endif /* _SSS_CHAIN_ID_ */

0 comments on commit 59958cd

Please sign in to comment.