aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlo Lobrano <carlo.lobrano@telit.com>2016-12-20 12:34:01 +0100
committerAleksander Morgado <aleksander@aleksander.es>2016-12-20 16:15:37 +0100
commit9a92034cd3c47349a0c1d3c95de8672275352240 (patch)
treeb3cba4f7231f8ae3cb224320f8115e58a4f4a0ec
parent0bf4db6561de9be61028eb6bc1792a3b7cc410b5 (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.c14
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