summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2019-12-02 13:07:23 +0100
committerAleksander Morgado <aleksander@aleksander.es>2019-12-03 13:15:27 +0100
commit267f64d6623adc12471139c7e6f581b8de1a4c01 (patch)
tree905cc3d50038c39b73c911482409e401bef00384
parent89356ec51d2db800cb518e167149bfabd80904aa (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.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 (