Re: [PATCH] modem: fix race with nm_modem_set_mm_enabled



On Tue, 2011-08-02 at 17:23 -0400, Daniel Gnoutcheff wrote:
> Once we've sent a method call over DBus requesting that the modem be
> disabled, we should assume that the modem is disabled unless we hear
> otherwise.  Otherwise, code that checks the modem state immediately
> after it gets disabled might think that it's enabled when it almost
> certainly is not.

Applied, thanks!
Dan

> ---
>  src/modem-manager/nm-modem.c |   20 ++++++++++++++++----
>  1 files changed, 16 insertions(+), 4 deletions(-)
> 
> diff --git a/src/modem-manager/nm-modem.c b/src/modem-manager/nm-modem.c
> index 33f1078..1823e5e 100644
> --- a/src/modem-manager/nm-modem.c
> +++ b/src/modem-manager/nm-modem.c
> @@ -86,6 +86,17 @@ enum {
>  
>  static guint signals[LAST_SIGNAL] = { 0 };
>  
> +static void
> +update_mm_enabled (NMModem *self, gboolean new_enabled)
> +{
> +	NMModemPrivate *priv = NM_MODEM_GET_PRIVATE (self);
> +
> +	if (priv->mm_enabled != new_enabled) {
> +		priv->mm_enabled = new_enabled;
> +		g_object_notify (G_OBJECT (self), NM_MODEM_ENABLED);
> +	}
> +}
> +
>  gboolean
>  nm_modem_get_mm_enabled (NMModem *self)
>  {
> @@ -822,8 +833,7 @@ get_mm_enabled_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_d
>  	}
>  
>  	if (G_VALUE_HOLDS_BOOLEAN (&value)) {
> -		NM_MODEM_GET_PRIVATE (self)->mm_enabled = g_value_get_boolean (&value);
> -		g_object_notify (G_OBJECT (self), NM_MODEM_ENABLED);
> +		update_mm_enabled (self, g_value_get_boolean (&value));
>  	} else
>  		nm_log_warn (LOGD_MB, "failed get modem enabled state: unexpected reply type");
>  
> @@ -880,6 +890,9 @@ nm_modem_set_mm_enabled (NMModem *self, gboolean enabled)
>  		                         self, NULL,
>  		                         G_TYPE_BOOLEAN, enabled,
>  		                         G_TYPE_INVALID);
> +		/* If we are disabling the modem, stop saying that it's enabled. */
> +		if (!enabled)
> +			update_mm_enabled (self, enabled);
>  	}
>  }
>  
> @@ -898,8 +911,7 @@ modem_properties_changed (DBusGProxy *proxy,
>  
>  	value = g_hash_table_lookup (props, "Enabled");
>  	if (value && G_VALUE_HOLDS_BOOLEAN (value)) {
> -		priv->mm_enabled = g_value_get_boolean (value);
> -		g_object_notify (G_OBJECT (self), NM_MODEM_ENABLED);
> +		update_mm_enabled (self, g_value_get_boolean (value));
>  	}
>  
>  	value = g_hash_table_lookup (props, "IpMethod");




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]