[PATCH] bearer: notify final disconnect status using mm_bearer_report_connection_status

Prathmesh Prabhu pprabhu at chromium.org
Wed Oct 30 23:57:03 CET 2013


Some MMBearer methods to disconnect the bearer assume that the bearer is
disconnected even if the operation fails in a subclass. This leaves MMBearer
and MMBroadbandBearer states out of sync.

This patch notifies the bearer object of the final disconnection using
mm_bearer_report_connection_status. This gives the subclasses a chance to update
their state even when the disconnection attempt fails.
---
 src/mm-bearer.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/mm-bearer.c b/src/mm-bearer.c
index f57ea8b..6592619 100644
--- a/src/mm-bearer.c
+++ b/src/mm-bearer.c
@@ -441,7 +441,12 @@ disconnect_after_cancel_ready (MMBearer *self,
     else
         mm_dbg ("Disconnected bearer '%s'", self->priv->path);
 
-    bearer_update_status (self, MM_BEARER_STATUS_DISCONNECTED);
+    /* Report disconnection to the bearer object using class method
+     * mm_bearer_report_connection_status. This gives subclass implementations a
+     * chance to correctly update their own connection state, in case this base
+     * class ignores a failed disconnection attempt.
+     */
+    mm_bearer_report_connection_status (self, MM_BEARER_CONNECTION_STATUS_DISCONNECTED);
 }
 
 static void
@@ -945,7 +950,12 @@ disconnect_force_ready (MMBearer *self,
     else
         mm_dbg ("Disconnected bearer '%s'", self->priv->path);
 
-    bearer_update_status (self, MM_BEARER_STATUS_DISCONNECTED);
+    /* Report disconnection to the bearer object using class method
+     * mm_bearer_report_connection_status. This gives subclass implementations a
+     * chance to correctly update their own connection state, in case this base
+     * class ignores a failed disconnection attempt.
+     */
+    mm_bearer_report_connection_status (self, MM_BEARER_CONNECTION_STATUS_DISCONNECTED);
 }
 
 void
-- 
1.8.4.1



More information about the ModemManager-devel mailing list