diff options
author | Carlo Lobrano <carlo.lobrano@telit.com> | 2016-12-20 12:34:01 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2016-12-20 16:15:37 +0100 |
commit | 9a92034cd3c47349a0c1d3c95de8672275352240 (patch) | |
tree | b3cba4f7231f8ae3cb224320f8115e58a4f4a0ec | |
parent | 0bf4db6561de9be61028eb6bc1792a3b7cc410b5 (diff) |
device: fixed crash in SIM hot swap when removing the SIM
mm_device_create_modem needs a valid object_manager instance to create the new
modem, while the one provided before was cleared out by a call to
mm_device_remove_modem few lines before.
Since the newly created modem refers to the same HW device, we can use
the same object_manager also.
https://bugs.freedesktop.org/show_bug.cgi?id=99160
-rw-r--r-- | src/mm-device.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/mm-device.c b/src/mm-device.c index 979c3970..6750a0b1 100644 --- a/src/mm-device.c +++ b/src/mm-device.c @@ -316,21 +316,27 @@ modem_valid (MMBaseModem *modem, MMDevice *self) { if (!mm_base_modem_get_valid (modem)) { + GDBusObjectManagerServer *object_manager; + + object_manager = g_object_ref (self->priv->object_manager); + /* Modem no longer valid */ mm_device_remove_modem (self); if (mm_base_modem_get_reprobe (modem)) { GError *error = NULL; - if (!mm_device_create_modem (self, self->priv->object_manager, &error)) { - mm_warn ("Could not recreate modem for device '%s': %s", - self->priv->uid, - error ? error->message : "unknown"); + if (!mm_device_create_modem (self, object_manager, &error)) { + mm_warn ("Could not recreate modem for device '%s': %s", + self->priv->uid, + error ? error->message : "unknown"); g_error_free (error); } else { mm_dbg ("Modem recreated for device '%s'", self->priv->uid); } } + + g_object_unref (object_manager); } else { /* Modem now valid, export it, but only if we really have it around. * It may happen that the initialization sequence fails because the |