diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-04-11 19:21:21 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-04-17 15:19:39 +0200 |
commit | 659d942c33767d44f2470aee183b0eb0fc268016 (patch) | |
tree | a227fb54afab8b94c948a1a205a6363ae73ca2f6 /src/mm-port-probe.c | |
parent | d1d5616ca5607836fc2a17024555ef2578bb6d8e (diff) |
mbim-port: make port closing async always
Don't just close the port and forget, really wait to get the CLOSE response
before going on.
Diffstat (limited to 'src/mm-port-probe.c')
-rw-r--r-- | src/mm-port-probe.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/mm-port-probe.c b/src/mm-port-probe.c index 5e39373e..76487534 100644 --- a/src/mm-port-probe.c +++ b/src/mm-port-probe.c @@ -345,8 +345,8 @@ port_probe_run_task_free (PortProbeRunTask *task) #if defined WITH_MBIM if (task->mbim_port) { - if (mm_mbim_port_is_open (task->mbim_port)) - mm_mbim_port_close (task->mbim_port); + /* We should have closed it cleanly before */ + g_assert (!mm_mbim_port_is_open (task->mbim_port)); g_object_unref (task->mbim_port); } #endif @@ -469,9 +469,22 @@ wdm_probe_qmi (MMPortProbe *self) #if defined WITH_MBIM static void +mbim_port_close_ready (MMMbimPort *mbim_port, + GAsyncResult *res, + MMPortProbe *self) +{ + PortProbeRunTask *task = self->priv->task; + + mm_mbim_port_close_finish (mbim_port, res, NULL); + + /* Keep on */ + task->source_id = g_idle_add ((GSourceFunc)wdm_probe, self); +} + +static void mbim_port_open_ready (MMMbimPort *mbim_port, - GAsyncResult *res, - MMPortProbe *self) + GAsyncResult *res, + MMPortProbe *self) { PortProbeRunTask *task = self->priv->task; GError *error = NULL; @@ -489,10 +502,9 @@ mbim_port_open_ready (MMMbimPort *mbim_port, /* Set probing result */ mm_port_probe_set_result_mbim (self, is_mbim); - mm_mbim_port_close (mbim_port); - - /* Keep on */ - task->source_id = g_idle_add ((GSourceFunc)wdm_probe, self); + mm_mbim_port_close (task->mbim_port, + (GAsyncReadyCallback)mbim_port_close_ready, + self); } static gboolean |