Changeset: 748b052917ce for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/748b052917ce
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk_tracer.c
gdk/gdk_tracer.h
Branch: Jun2023
Log Message:
Use atomic variables for lvl_per_component.
diffs (130 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -559,7 +559,7 @@ gdk_return log_tend(logger *lg);
gdk_return log_tflush(logger *lg, ulng log_file_id, ulng commit_ts);
gdk_return log_tsequence(logger *lg, int seq, lng id);
gdk_return log_tstart(logger *lg, bool flushnow, ulng *log_file_id);
-log_level_t lvl_per_component[];
+ATOMIC_TYPE lvl_per_component[];
void *mdlopen(const char *library, int mode);
const char *mercurial_revision(void) __attribute__((__const__));
int mo_add_option(opt **Set, int setlen, opt_kind kind, const char *name,
const char *value);
diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c
--- a/gdk/gdk_tracer.c
+++ b/gdk/gdk_tracer.c
@@ -36,8 +36,8 @@ static log_level_t cur_flush_level = DEF
static bool write_to_tracer = false;
-#define GENERATE_LOG_LEVEL(COMP) DEFAULT_LOG_LEVEL,
-log_level_t lvl_per_component[] = {
+#define GENERATE_LOG_LEVEL(COMP) ATOMIC_VAR_INIT((ATOMIC_BASE_TYPE)
DEFAULT_LOG_LEVEL),
+ATOMIC_TYPE lvl_per_component[] = {
FOREACH_COMP(GENERATE_LOG_LEVEL)
};
@@ -89,7 +89,7 @@ static const char *level_str[] = {
do { \
write_to_tracer = false; \
for (int i = 0; !write_to_tracer && i < (int) COMPONENTS_COUNT;
i++) { \
- write_to_tracer = lvl_per_component[i] >
DEFAULT_LOG_LEVEL; \
+ write_to_tracer = (log_level_t)
ATOMIC_GET(&lvl_per_component[i]) > DEFAULT_LOG_LEVEL; \
} \
} while(0)
@@ -182,10 +182,9 @@ static gdk_return
}
static void
-set_level_for_layer(int layer, int lvl)
+set_level_for_layer(int layer, log_level_t level)
{
const char *tok = NULL;
- log_level_t level = (log_level_t) lvl;
// make sure we initialize before changing the component level
MT_lock_set(&GDKtracer_lock);
@@ -196,22 +195,22 @@ set_level_for_layer(int layer, int lvl)
for (int i = 0; i < COMPONENTS_COUNT; i++) {
if (layer == MDB_ALL) {
- lvl_per_component[i] = level;
+ ATOMIC_SET(&lvl_per_component[i], (ATOMIC_BASE_TYPE)
level);
} else {
tok = component_str[i];
switch (layer) {
case SQL_ALL:
if (strncmp(tok, "SQL_", 4) == 0)
- lvl_per_component[i] = level;
+ ATOMIC_SET(&lvl_per_component[i],
(ATOMIC_BASE_TYPE) level);
break;
case MAL_ALL:
if (strncmp(tok, "MAL_", 4) == 0)
- lvl_per_component[i] = level;
+ ATOMIC_SET(&lvl_per_component[i],
(ATOMIC_BASE_TYPE) level);
break;
case GDK_ALL:
if (strncmp(tok, "GDK", 3) == 0)
- lvl_per_component[i] = level;
+ ATOMIC_SET(&lvl_per_component[i],
(ATOMIC_BASE_TYPE) level);
break;
default:
break;
@@ -355,7 +354,7 @@ GDKtracer_set_component_level(const char
write_to_tracer |= level > DEFAULT_LOG_LEVEL;
MT_lock_unset(&GDKtracer_lock);
- lvl_per_component[component] = level;
+ ATOMIC_SET(&lvl_per_component[component], (ATOMIC_BASE_TYPE) level);
return GDK_SUCCEED;
}
@@ -369,7 +368,7 @@ GDKtracer_get_component_level(const char
GDKerror("unknown component\n");
return NULL;
}
- return level_str[(int) lvl_per_component[component]];
+ return level_str[ATOMIC_GET(&lvl_per_component[component])];
}
@@ -382,7 +381,7 @@ GDKtracer_reset_component_level(const ch
GDKerror("unknown component\n");
return GDK_FAIL;
}
- lvl_per_component[component] = DEFAULT_LOG_LEVEL;
+ ATOMIC_SET(&lvl_per_component[component], (ATOMIC_BASE_TYPE)
DEFAULT_LOG_LEVEL);
MT_lock_set(&GDKtracer_lock);
GDK_TRACER_RESET_OUTPUT();
MT_lock_unset(&GDKtracer_lock);
@@ -617,7 +616,7 @@ GDKtracer_fill_comp_info(BAT *id, BAT *c
if (BUNappend(component, component_str[i], false) !=
GDK_SUCCEED)
return GDK_FAIL;
- if (BUNappend(log_level, level_str[lvl_per_component[i]],
false) != GDK_SUCCEED)
+ if (BUNappend(log_level,
level_str[ATOMIC_GET(&lvl_per_component[i])], false) != GDK_SUCCEED)
return GDK_FAIL;
}
diff --git a/gdk/gdk_tracer.h b/gdk/gdk_tracer.h
--- a/gdk/gdk_tracer.h
+++ b/gdk/gdk_tracer.h
@@ -135,14 +135,14 @@ typedef enum {
/*
* Logging macros
*/
-gdk_export log_level_t lvl_per_component[];
+gdk_export ATOMIC_TYPE lvl_per_component[];
// If the LOG_LEVEL of the message is one of the following: CRITICAL,
// ERROR or WARNING it is logged no matter the component. In any other
// case the component is taken into account
#define GDK_TRACER_TEST(LOG_LEVEL, COMP) \
(LOG_LEVEL <= M_WARNING || \
- lvl_per_component[COMP] >= LOG_LEVEL)
+ (log_level_t) ATOMIC_GET(&lvl_per_component[COMP]) >= LOG_LEVEL)
#define GDK_TRACER_LOG_BODY(LOG_LEVEL, COMP, MSG, ...) \
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]