summary refs log tree commit diff
path: root/src/devices/wwan
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2016-05-11 17:08:25 +0200
committerMichael Biebl <biebl@debian.org>2016-05-11 17:08:25 +0200
commit73e152af6e3fb4f5848bfb8394484026ff119003 (patch)
treed5a8b37778d3a95c51511451b38b6a329b94cb41 /src/devices/wwan
parent78c3b8801ecf4975e5da1af3b10ae20dd2d876de (diff)
Imported Upstream version 1.2.2 upstream/1.2.2
Diffstat (limited to 'src/devices/wwan')
-rw-r--r--src/devices/wwan/nm-modem-broadband.c23
-rw-r--r--src/devices/wwan/nm-modem.c3
2 files changed, 20 insertions, 6 deletions
diff --git a/src/devices/wwan/nm-modem-broadband.c b/src/devices/wwan/nm-modem-broadband.c
index 9539fefd..1a6e6b25 100644
--- a/src/devices/wwan/nm-modem-broadband.c
+++ b/src/devices/wwan/nm-modem-broadband.c
@@ -310,6 +310,10 @@ connect_ready (MMModemSimple *simple_iface,
 	NMModemIPMethod ip6_method = NM_MODEM_IP_METHOD_UNKNOWN;
 
 	self->priv->bearer = mm_modem_simple_connect_finish (simple_iface, res, &error);
+
+	if (!ctx)
+		return;
+
 	if (!self->priv->bearer) {
 		if (g_error_matches (error, MM_MOBILE_EQUIPMENT_ERROR, MM_MOBILE_EQUIPMENT_ERROR_SIM_PIN) ||
 		    (g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_UNAUTHORIZED) &&
@@ -377,9 +381,17 @@ connect_ready (MMModemSimple *simple_iface,
 static void
 send_pin_ready (MMSim *sim, GAsyncResult *result, NMModemBroadband *self)
 {
-    GError *error = NULL;
+	gs_free_error GError *error = NULL;
+
+	mm_sim_send_pin_finish (sim, result, &error);
+
+	if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+		return;
+
+	if (!self->priv->ctx || self->priv->ctx->step != CONNECT_STEP_UNLOCK)
+		return;
 
-    if (!mm_sim_send_pin_finish (sim, result, &error)) {
+	if (error) {
 		if (g_error_matches (error, MM_MOBILE_EQUIPMENT_ERROR, MM_MOBILE_EQUIPMENT_ERROR_SIM_PIN) ||
 		    (g_error_matches (error, MM_CORE_ERROR, MM_CORE_ERROR_UNAUTHORIZED) &&
 		     mm_modem_get_unlock_required (self->priv->modem_iface) == MM_MODEM_LOCK_SIM_PIN)) {
@@ -387,9 +399,8 @@ send_pin_ready (MMSim *sim, GAsyncResult *result, NMModemBroadband *self)
 		} else {
 			g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, translate_mm_error (error));
 		}
-		g_error_free (error);
 		return;
-    }
+	}
 
 	self->priv->ctx->step++;
 	connect_context_step (self);
@@ -1079,14 +1090,16 @@ simple_disconnect_ready (MMModemSimple *modem_iface,
 }
 
 static void
-disconnect (NMModem *self,
+disconnect (NMModem *modem,
             gboolean warn,
             GCancellable *cancellable,
             GAsyncReadyCallback callback,
             gpointer user_data)
 {
+	NMModemBroadband *self = NM_MODEM_BROADBAND (modem);
 	DisconnectContext *ctx;
 
+	connect_context_clear (self);
 	ctx = g_slice_new (DisconnectContext);
 	ctx->self = g_object_ref (self);
 	ctx->result = g_simple_async_result_new (G_OBJECT (self),
diff --git a/src/devices/wwan/nm-modem.c b/src/devices/wwan/nm-modem.c
index 804a6d9c..a6c77007 100644
--- a/src/devices/wwan/nm-modem.c
+++ b/src/devices/wwan/nm-modem.c
@@ -1187,6 +1187,7 @@ nm_modem_device_state_changed (NMModem *self,
 	case NM_DEVICE_STATE_UNMANAGED:
 	case NM_DEVICE_STATE_UNAVAILABLE:
 	case NM_DEVICE_STATE_FAILED:
+	case NM_DEVICE_STATE_DISCONNECTED:
 		if (priv->act_request) {
 			cancel_get_secrets (self);
 			g_object_unref (priv->act_request);
@@ -1195,7 +1196,7 @@ nm_modem_device_state_changed (NMModem *self,
 
 		if (was_connected) {
 			/* Don't bother warning on FAILED since the modem is already gone */
-			if (new_state == NM_DEVICE_STATE_FAILED)
+			if (new_state == NM_DEVICE_STATE_FAILED || new_state == NM_DEVICE_STATE_DISCONNECTED)
 				warn = FALSE;
 			/* First cleanup */
 			NM_MODEM_GET_CLASS (self)->deactivate_cleanup (self, NULL);