Merge remote-tracking branch 'cros/upstream' into 'cros/master'
diff --git a/src/libmbim-glib/mbim-cid.c b/src/libmbim-glib/mbim-cid.c
index 23e97b7..8b47c5e 100644
--- a/src/libmbim-glib/mbim-cid.c
+++ b/src/libmbim-glib/mbim-cid.c
@@ -308,10 +308,12 @@
     /* CID = 0 is never a valid command */
     g_return_val_if_fail (cid > 0, NULL);
     /* Known service required */
-    g_return_val_if_fail (service > MBIM_SERVICE_INVALID, NULL);
+    g_return_val_if_fail (service >= MBIM_SERVICE_INVALID, NULL);
     g_return_val_if_fail (service < MBIM_SERVICE_LAST, NULL);
 
     switch (service) {
+    case MBIM_SERVICE_INVALID:
+        return "invalid";
     case MBIM_SERVICE_BASIC_CONNECT:
         return mbim_cid_basic_connect_get_string (cid);
     case MBIM_SERVICE_SMS:
@@ -336,6 +338,6 @@
         return mbim_cid_qmi_get_string (cid);
     default:
         g_assert_not_reached ();
-        return FALSE;
+        return NULL;
     }
 }
diff --git a/src/libmbim-glib/mbim-device.c b/src/libmbim-glib/mbim-device.c
index 961e79e..013fd8a 100644
--- a/src/libmbim-glib/mbim-device.c
+++ b/src/libmbim-glib/mbim-device.c
@@ -1546,6 +1546,8 @@
     if (!self->priv->iochannel && !self->priv->socket_connection && !self->priv->socket_client)
         return TRUE;
 
+    g_debug ("[%s] channel destroyed", self->priv->path_display);
+
     if (self->priv->iochannel) {
         g_io_channel_shutdown (self->priv->iochannel, TRUE, &inner_error);
         g_io_channel_unref (self->priv->iochannel);
@@ -1642,6 +1644,8 @@
         g_simple_async_result_take_error (ctx->result, error);
     else if (!mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_CLOSE_DONE, &error))
         g_simple_async_result_take_error (ctx->result, error);
+    else if (!destroy_iochannel (self, &error))
+        g_simple_async_result_take_error (ctx->result, error);
     else
         g_simple_async_result_set_op_res_gboolean (ctx->result, TRUE);