aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-broadband-modem.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index fcecd8dc..7a6dde62 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -3972,6 +3972,7 @@ modem_location_load_capabilities (MMIfaceModemLocation *self,
typedef enum {
DISABLING_STEP_FIRST,
+ DISABLING_STEP_DISCONNECT_BEARERS,
DISABLING_STEP_IFACE_SIMPLE,
DISABLING_STEP_IFACE_MESSAGING,
DISABLING_STEP_IFACE_LOCATION,
@@ -4047,6 +4048,24 @@ INTERFACE_DISABLE_READY_FN (iface_modem_cdma, MM_IFACE_MODEM_CDMA, TRUE)
INTERFACE_DISABLE_READY_FN (iface_modem_location, MM_IFACE_MODEM_LOCATION, FALSE)
static void
+bearer_list_disconnect_all_bearers_ready (MMBearerList *list,
+ GAsyncResult *res,
+ DisablingContext *ctx)
+{
+ GError *error = NULL;
+
+ if (!mm_bearer_list_disconnect_all_bearers_finish (list, res, &error)) {
+ g_simple_async_result_take_error (G_SIMPLE_ASYNC_RESULT (ctx->result), error);
+ disabling_context_complete_and_free (ctx);
+ return;
+ }
+
+ /* Go on to next step */
+ ctx->step++;
+ disabling_step (ctx);
+}
+
+static void
disabling_step (DisablingContext *ctx)
{
switch (ctx->step) {
@@ -4054,6 +4073,13 @@ disabling_step (DisablingContext *ctx)
/* Fall down to next step */
ctx->step++;
+ case DISABLING_STEP_DISCONNECT_BEARERS:
+ mm_bearer_list_disconnect_all_bearers (
+ ctx->self->priv->modem_bearer_list,
+ (GAsyncReadyCallback)bearer_list_disconnect_all_bearers_ready,
+ ctx);
+ return;
+
case DISABLING_STEP_IFACE_SIMPLE:
/* Fall down to next step */
ctx->step++;