aboutsummaryrefslogtreecommitdiff
path: root/libmm-glib/mm-modem-signal.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-07-01 15:01:11 +0200
committerAleksander Morgado <aleksander@aleksander.es>2021-07-01 15:18:44 +0200
commitafc7e5f9022ecec2e1ec388c9f8c48fb7c16a2b9 (patch)
tree6906659d3fdd4906ca74e8f0c24a26bb574f7c40 /libmm-glib/mm-modem-signal.c
parent30c9fc65dacd2fb5df3913032a420e750a6ae054 (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.c37
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;
}