From 5e2658c98196f8fd3558a2ffe40bd789ed27e8a3 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 29 Nov 2019 12:37:06 +0100 Subject: m_config: make m_config_cache_write_opt() check/return changes Goes in line with the recent changes to always checking for option value changes. The player core will use this to determine whether it should send additional change events. --- options/m_config.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'options/m_config.c') diff --git a/options/m_config.c b/options/m_config.c index 318ced3d34..52a9b2f6d8 100644 --- a/options/m_config.c +++ b/options/m_config.c @@ -1538,7 +1538,7 @@ static void find_opt(struct m_config_shadow *shadow, struct m_config_data *data, } } -void m_config_cache_write_opt(struct m_config_cache *cache, void *ptr) +bool m_config_cache_write_opt(struct m_config_cache *cache, void *ptr) { struct config_cache *in = cache->internal; struct m_config_shadow *shadow = in->shadow; @@ -1559,17 +1559,22 @@ void m_config_cache_write_opt(struct m_config_cache *cache, void *ptr) struct m_group_data *gsrc = m_config_gdata(in->src, group_idx); assert(gdst && gsrc); - m_option_copy(opt, gsrc->udata + opt->offset, ptr); + bool changed = !m_option_equal(opt, gsrc->udata + opt->offset, ptr); + if (changed) { + m_option_copy(opt, gsrc->udata + opt->offset, ptr); - gsrc->ts = atomic_fetch_add(&shadow->ts, 1) + 1; + gsrc->ts = atomic_fetch_add(&shadow->ts, 1) + 1; - for (int n = 0; n < shadow->num_listeners; n++) { - struct config_cache *listener = shadow->listeners[n]; - if (listener->wakeup_cb && m_config_gdata(listener->data, group_idx)) - listener->wakeup_cb(listener->wakeup_cb_ctx); + for (int n = 0; n < shadow->num_listeners; n++) { + struct config_cache *listener = shadow->listeners[n]; + if (listener->wakeup_cb && m_config_gdata(listener->data, group_idx)) + listener->wakeup_cb(listener->wakeup_cb_ctx); + } } pthread_mutex_unlock(&shadow->lock); + + return changed; } void m_config_notify_change_co(struct m_config *config, -- cgit v1.2.3