diff options
Diffstat (limited to 'src/mm-broadband-modem-qmi.c')
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index 8a11318f..6b190f66 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -9068,20 +9068,26 @@ qmi_device_removed_cb (QmiDevice *device, mm_base_modem_set_valid (MM_BASE_MODEM (self), FALSE); } -static void -track_qmi_device_removed (MMBroadbandModemQmi *self, - MMPortQmi *qmi) +static gboolean +track_qmi_device_removed (MMBroadbandModemQmi *self, + MMPortQmi *qmi, + GError **error) { QmiDevice *device; device = mm_port_qmi_peek_device (qmi); - g_assert (device); + if (!device) { + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Cannot track QMI device removal: QMI port no longer available"); + return FALSE; + } self->priv->qmi_device_removed_id = g_signal_connect ( device, QMI_DEVICE_SIGNAL_REMOVED, G_CALLBACK (qmi_device_removed_cb), self); + return TRUE; } static void @@ -9130,14 +9136,20 @@ static void allocate_next_client (GTask *task) { InitializationStartedContext *ctx; - MMBroadbandModemQmi *self; + MMBroadbandModemQmi *self; self = g_task_get_source_object (task); ctx = g_task_get_task_data (task); if (ctx->service_index == G_N_ELEMENTS (qmi_services)) { + GError *error = NULL; + /* Done we are, track device removal and launch parent's callback */ - track_qmi_device_removed (self, ctx->qmi); + if (!track_qmi_device_removed (self, ctx->qmi, &error)) { + g_task_return_error (task, error); + g_object_unref (task); + return; + } parent_initialization_started (task); return; } @@ -9206,6 +9218,7 @@ initialization_started (MMBroadbandModem *self, { InitializationStartedContext *ctx; GTask *task; + GError *error = NULL; ctx = g_new0 (InitializationStartedContext, 1); ctx->qmi = mm_base_modem_get_port_qmi (MM_BASE_MODEM (self)); @@ -9218,7 +9231,7 @@ initialization_started (MMBroadbandModem *self, g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, - "Cannot initialize: QMI port went missing"); + "Cannot initialize: QMI port no longer available"); g_object_unref (task); return; } @@ -9226,7 +9239,12 @@ initialization_started (MMBroadbandModem *self, if (mm_port_qmi_is_open (ctx->qmi)) { /* Nothing to be done, just track device removal and launch parent's * callback */ - track_qmi_device_removed (MM_BROADBAND_MODEM_QMI (self), ctx->qmi); + if (!track_qmi_device_removed (MM_BROADBAND_MODEM_QMI (self), ctx->qmi, &error)) { + g_task_return_error (task, error); + g_object_unref (task); + return; + } + parent_initialization_started (task); return; } |