aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-bearer-mbim.c20
-rw-r--r--src/mm-bearer-qmi.c13
-rw-r--r--src/mm-broadband-bearer.c28
3 files changed, 23 insertions, 38 deletions
diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c
index a776c7f1..ac61592e 100644
--- a/src/mm-bearer-mbim.c
+++ b/src/mm-bearer-mbim.c
@@ -1319,20 +1319,17 @@ disconnect (MMBaseBearer *_self,
DisconnectContext *ctx;
GTask *task;
- if (!self->priv->data) {
- g_task_report_new_error (
- self,
- callback,
- user_data,
- disconnect,
- MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "Couldn't disconnect MBIM bearer: this bearer is not connected");
+ if (!peek_ports (self, &device, NULL, callback, user_data))
return;
- }
- if (!peek_ports (self, &device, NULL, callback, user_data))
+ task = g_task_new (self, NULL, callback, user_data);
+
+ if (!self->priv->data) {
+ mm_dbg ("No need to disconnect: MBIM bearer is already disconnected");
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
return;
+ }
mm_dbg ("Launching disconnection on data port (%s/%s)",
mm_port_subsys_get_string (mm_port_get_subsys (self->priv->data)),
@@ -1343,7 +1340,6 @@ disconnect (MMBaseBearer *_self,
ctx->data = g_object_ref (self->priv->data);
ctx->step = DISCONNECT_STEP_FIRST;
- task = g_task_new (self, NULL, callback, user_data);
g_task_set_task_data (task, ctx, (GDestroyNotify)disconnect_context_free);
/* Run! */
diff --git a/src/mm-bearer-qmi.c b/src/mm-bearer-qmi.c
index 1bcb8a0a..3b005979 100644
--- a/src/mm-bearer-qmi.c
+++ b/src/mm-bearer-qmi.c
@@ -2031,18 +2031,15 @@ disconnect (MMBaseBearer *_self,
DisconnectContext *ctx;
GTask *task;
+ task = g_task_new (self, NULL, callback, user_data);
+
if ((!self->priv->packet_data_handle_ipv4 && !self->priv->packet_data_handle_ipv6) ||
(!self->priv->client_ipv4 && !self->priv->client_ipv6) ||
!self->priv->data ||
!self->priv->qmi) {
- g_task_report_new_error (
- self,
- callback,
- user_data,
- disconnect,
- MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "Couldn't disconnect QMI bearer: this bearer is not connected");
+ mm_dbg ("No need to disconnect: QMI bearer is already disconnected");
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
return;
}
diff --git a/src/mm-broadband-bearer.c b/src/mm-broadband-bearer.c
index cce1fb45..2d3cafd5 100644
--- a/src/mm-broadband-bearer.c
+++ b/src/mm-broadband-bearer.c
@@ -1805,15 +1805,12 @@ disconnect (MMBaseBearer *self,
MMBaseModem *modem = NULL;
GTask *task;
+ task = g_task_new (self, NULL, callback, user_data);
+
if (!MM_BROADBAND_BEARER (self)->priv->port) {
- g_task_report_new_error (
- self,
- callback,
- user_data,
- disconnect,
- MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "Couldn't disconnect: this bearer is not connected");
+ mm_dbg ("No need to disconnect: bearer is already disconnected");
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
return;
}
@@ -1825,20 +1822,15 @@ disconnect (MMBaseBearer *self,
/* We need the primary port to disconnect... */
primary = mm_base_modem_peek_port_primary (modem);
if (!primary) {
- g_task_report_new_error (
- self,
- callback,
- user_data,
- disconnect,
- MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "Couldn't disconnect: couldn't get primary port");
+ g_task_return_new_error (task,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_FAILED,
+ "Couldn't disconnect: couldn't get primary port");
+ g_object_unref (task);
g_object_unref (modem);
return;
}
- task = g_task_new (self, NULL, callback , user_data);
-
switch (MM_BROADBAND_BEARER (self)->priv->connection_type) {
case CONNECTION_TYPE_3GPP:
MM_BROADBAND_BEARER_GET_CLASS (self)->disconnect_3gpp (