diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2021-07-01 15:01:11 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-07-01 15:18:44 +0200 |
commit | afc7e5f9022ecec2e1ec388c9f8c48fb7c16a2b9 (patch) | |
tree | 6906659d3fdd4906ca74e8f0c24a26bb574f7c40 /libmm-glib/mm-modem-signal.c | |
parent | 30c9fc65dacd2fb5df3913032a420e750a6ae054 (diff) |
libmm-glib: use single mutex in each type to sync access
There is truly no need for a per-property mutex, using a global one
for the whole object is equally fine.
Diffstat (limited to 'libmm-glib/mm-modem-signal.c')
-rw-r--r-- | libmm-glib/mm-modem-signal.c | 37 |
1 files changed, 11 insertions, 26 deletions
diff --git a/libmm-glib/mm-modem-signal.c b/libmm-glib/mm-modem-signal.c index 0b740c72..c511b1d8 100644 --- a/libmm-glib/mm-modem-signal.c +++ b/libmm-glib/mm-modem-signal.c @@ -42,8 +42,7 @@ G_DEFINE_TYPE (MMModemSignal, mm_modem_signal, MM_GDBUS_TYPE_MODEM_SIGNAL_PROXY) typedef struct { - GMutex mutex; - guint id; + guint id; MMSignal *info; } UpdatedProperty; @@ -58,6 +57,9 @@ typedef enum { } UpdatedPropertyType; struct _MMModemSignalPrivate { + /* Common mutex to sync access */ + GMutex mutex; + UpdatedProperty values [UPDATED_PROPERTY_TYPE_LAST]; }; @@ -282,7 +284,7 @@ values_updated (MMModemSignal *self, GParamSpec *pspec, UpdatedPropertyType type) { - g_mutex_lock (&self->priv->values[type].mutex); + g_mutex_lock (&self->priv->mutex); { GVariant *dictionary; @@ -298,7 +300,7 @@ values_updated (MMModemSignal *self, } } } - g_mutex_unlock (&self->priv->values[type].mutex); + g_mutex_unlock (&self->priv->mutex); } static void @@ -306,7 +308,7 @@ ensure_internal (MMModemSignal *self, MMSignal **dup, UpdatedPropertyType type) { - g_mutex_lock (&self->priv->values[type].mutex); + g_mutex_lock (&self->priv->mutex); { /* If this is the first time ever asking for the object, setup the * update listener and the initial object, if any. */ @@ -336,7 +338,7 @@ ensure_internal (MMModemSignal *self, if (dup && self->priv->values[type].info) *dup = g_object_ref (self->priv->values[type].info); } - g_mutex_unlock (&self->priv->values[type].mutex); + g_mutex_unlock (&self->priv->mutex); } /*****************************************************************************/ @@ -660,13 +662,8 @@ mm_modem_signal_peek_nr5g (MMModemSignal *self) static void mm_modem_signal_init (MMModemSignal *self) { - guint i; - - /* Setup private data */ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MM_TYPE_MODEM_SIGNAL, MMModemSignalPrivate); - - for (i = 0; i < UPDATED_PROPERTY_TYPE_LAST; i++) - g_mutex_init (&self->priv->values[i].mutex); + g_mutex_init (&self->priv->mutex); } static void @@ -675,22 +672,12 @@ finalize (GObject *object) MMModemSignal *self = MM_MODEM_SIGNAL (object); guint i; - for (i = 0; i < UPDATED_PROPERTY_TYPE_LAST; i++) - g_mutex_clear (&self->priv->values[i].mutex); - - G_OBJECT_CLASS (mm_modem_signal_parent_class)->finalize (object); -} - -static void -dispose (GObject *object) -{ - MMModemSignal *self = MM_MODEM_SIGNAL (object); - guint i; + g_mutex_clear (&self->priv->mutex); for (i = 0; i < UPDATED_PROPERTY_TYPE_LAST; i++) g_clear_object (&self->priv->values[i].info); - G_OBJECT_CLASS (mm_modem_signal_parent_class)->dispose (object); + G_OBJECT_CLASS (mm_modem_signal_parent_class)->finalize (object); } static void @@ -700,7 +687,5 @@ mm_modem_signal_class_init (MMModemSignalClass *modem_class) g_type_class_add_private (object_class, sizeof (MMModemSignalPrivate)); - /* Virtual methods */ - object_class->dispose = dispose; object_class->finalize = finalize; } |