Re: [PATCH] modem: fix race with nm_modem_set_mm_enabled

2011-08-16 Thread Dan Williams
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);


___
networkmanager-list mailing list
networkmanager-list@gnome.org
http://mail.gnome.org/mailman/listinfo/networkmanager-list


[PATCH] modem: fix race with nm_modem_set_mm_enabled

2011-08-02 Thread Daniel Gnoutcheff
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.
---
 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);
-- 
1.7.4.1

___
networkmanager-list mailing list
networkmanager-list@gnome.org
http://mail.gnome.org/mailman/listinfo/networkmanager-list