diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2019-12-02 13:07:23 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2019-12-03 13:15:27 +0100 |
commit | 267f64d6623adc12471139c7e6f581b8de1a4c01 (patch) | |
tree | 905cc3d50038c39b73c911482409e401bef00384 | |
parent | 89356ec51d2db800cb518e167149bfabd80904aa (diff) |
bearer: avoid reporting disconnection error if already disconnected
When we try to disconnect a bearer and the bearer is already
disconnected (e.g. after a cancelled connection attempt), avoid reporting
that as an error:
<warn> [1575287560.433398] Error disconnecting bearer '/org/freedesktop/ModemManager1/Bearer/0': 'Couldn't disconnect QMI bearer: this bearer is not connected'. Will assume disconnected anyway.
(cherry picked from commit 76cafbb603599a9f19592daca50e00c6e960998e)
-rw-r--r-- | src/mm-bearer-mbim.c | 20 | ||||
-rw-r--r-- | src/mm-bearer-qmi.c | 13 | ||||
-rw-r--r-- | src/mm-broadband-bearer.c | 28 |
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 ( |