summaryrefslogtreecommitdiff
path: root/src/mm-broadband-modem-qmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-broadband-modem-qmi.c')
-rw-r--r--src/mm-broadband-modem-qmi.c34
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;
}