summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/msg.c31
1 files changed, 14 insertions, 17 deletions
diff --git a/common/msg.c b/common/msg.c
index 11fee518d2..d2e728b585 100644
--- a/common/msg.c
+++ b/common/msg.c
@@ -66,7 +66,7 @@ struct mp_log_root {
/* This is incremented every time the msglevels must be reloaded.
* (This is perhaps better than maintaining a globally accessible and
* synchronized mp_log tree.) */
- int64_t reload_counter;
+ atomic_ulong reload_counter;
};
struct mp_log {
@@ -75,7 +75,7 @@ struct mp_log {
const char *verbose_prefix;
int level; // minimum log level for any outputs
int terminal_level; // minimum log level for terminal output
- int64_t reload_counter;
+ atomic_ulong reload_counter;
};
struct mp_log_buffer {
@@ -119,7 +119,7 @@ static void update_loglevel(struct mp_log *log)
log->level = MPMAX(log->level, log->root->buffers[n]->level);
if (log->root->stats_file)
log->level = MPMAX(log->level, MSGL_STATS);
- log->reload_counter = log->root->reload_counter;
+ atomic_store(&log->reload_counter, atomic_load(&log->root->reload_counter));
pthread_mutex_unlock(&mp_msg_lock);
}
@@ -127,10 +127,10 @@ static void update_loglevel(struct mp_log *log)
// Thread-safety: see mp_msg().
bool mp_msg_test(struct mp_log *log, int lev)
{
- mp_memory_barrier();
- if (!log->root || log->root->mute)
+ struct mp_log_root *root = log->root;
+ if (!root || root->mute)
return false;
- if (log->reload_counter != log->root->reload_counter)
+ if (atomic_load(&log->reload_counter) != atomic_load(&root->reload_counter))
update_loglevel(log);
return lev <= log->level;
}
@@ -395,9 +395,11 @@ void mp_msg_init(struct mpv_global *global)
assert(!global->log);
struct mp_log_root *root = talloc_zero(NULL, struct mp_log_root);
- root->global = global;
- root->header = true;
- root->reload_counter = 1;
+ *root = (struct mp_log_root){
+ .global = global,
+ .header = true,
+ .reload_counter = ATOMIC_VAR_INIT(1),
+ };
struct mp_log dummy = { .root = root };
struct mp_log *log = mp_log_new(root, &dummy, "");
@@ -429,8 +431,7 @@ void mp_msg_update_msglevels(struct mpv_global *global)
talloc_free(root->msglevels);
root->msglevels = talloc_strdup(root, global->opts->msglevels);
- mp_atomic_add_and_fetch(&root->reload_counter, 1);
- mp_memory_barrier();
+ atomic_fetch_add(&root->reload_counter, 1);
pthread_mutex_unlock(&mp_msg_lock);
}
@@ -475,9 +476,7 @@ struct mp_log_buffer *mp_msg_log_buffer_new(struct mpv_global *global,
MP_TARRAY_APPEND(root, root->buffers, root->num_buffers, buffer);
- mp_atomic_add_and_fetch(&root->reload_counter, 1);
- mp_memory_barrier();
-
+ atomic_fetch_add(&root->reload_counter, 1);
pthread_mutex_unlock(&mp_msg_lock);
return buffer;
@@ -510,9 +509,7 @@ found:
}
talloc_free(buffer);
- mp_atomic_add_and_fetch(&root->reload_counter, 1);
- mp_memory_barrier();
-
+ atomic_fetch_add(&root->reload_counter, 1);
pthread_mutex_unlock(&mp_msg_lock);
}