From 75cb1631909d73654f97e98e4ed95206e990ecd3 Mon Sep 17 00:00:00 2001 From: Szymon Janc Date: Sun, 29 Jun 2014 22:20:46 +0200 Subject: [PATCH] android/bluetooth: Fix adding device to bonded list multiple times Current bearer pair state needs to be checked as well since event triggering state update can be received multiple times. This fix crash on bluetoothd shutdown due to double free of device. --- android/bluetooth.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/bluetooth.c b/android/bluetooth.c index 41225d6eb..106087600 100644 --- a/android/bluetooth.c +++ b/android/bluetooth.c @@ -793,7 +793,7 @@ static void update_bredr_state(struct device *dev, bool pairing, bool paired, if (!pairing && !paired && dev->pairing && dev->bredr_paired) goto done; - if (paired && !dev->le_paired) { + if (paired && !dev->le_paired && !dev->bredr_paired) { cached_devices = g_slist_remove(cached_devices, dev); bonded_devices = g_slist_prepend(bonded_devices, dev); remove_device_info(dev, CACHE_FILE); @@ -826,7 +826,7 @@ static void update_le_state(struct device *dev, bool pairing, bool paired, if (!pairing && !paired && dev->pairing && dev->le_paired) goto done; - if (paired && !dev->bredr_paired) { + if (paired && !dev->bredr_paired && !dev->le_paired) { cached_devices = g_slist_remove(cached_devices, dev); bonded_devices = g_slist_prepend(bonded_devices, dev); remove_device_info(dev, CACHE_FILE); -- 2.47.3