hfp_hf_bluez5: Fix crash on re-pairing a Device
authorKuba Pawlak <kubax.t.pawlak@intel.com>
Fri, 10 Jul 2015 15:08:01 +0000 (17:08 +0200)
committerDenis Kenzior <denkenz@gmail.com>
Mon, 13 Jul 2015 02:19:31 +0000 (21:19 -0500)
It may happen that a Device object is unpaired an paired again
without being removed from DBus. This in turn triggers second
modem object to be created, but not fully initialized.
If this modem object is used, oFono will crash.

plugins/hfp_hf_bluez5.c

index 5ee70c5..713c789 100644 (file)
@@ -738,8 +738,17 @@ static void modem_register_from_proxy(GDBusProxy *proxy, const char *path)
                return;
 
        dbus_message_iter_get_basic(&iter, &paired);
-       if (paired == FALSE)
+
+       if (paired == FALSE) {
+               modem = ofono_modem_find(device_path_compare, (void *) path);
+
+               if (modem != NULL) {
+                       ofono_modem_remove(modem);
+                       g_dbus_proxy_set_removed_watch(proxy, NULL, NULL);
+                       g_dbus_proxy_set_property_watch(proxy, NULL, NULL);
+               }
                return;
+       }
 
        if (g_dbus_proxy_get_property(proxy, "UUIDs", &iter) == FALSE)
                return;