diff options
Diffstat (limited to 'common/msg.c')
-rw-r--r-- | common/msg.c | 31 |
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); } |