From e13cd2f762741d80dff0238177d6a179d9609a31 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Fri, 8 Feb 2013 11:51:28 +0200 Subject: [PATCH] core: Fix calling profile .connect multiple times Sometimes profiles may complete the connection in different order than expected so the code has to check if it was actually the current pending profile to proceed to the next. --- src/device.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/device.c b/src/device.c index 686dbfb1d..4320234d6 100644 --- a/src/device.c +++ b/src/device.c @@ -1075,8 +1075,14 @@ static int connect_next(struct btd_device *dev) void device_profile_connected(struct btd_device *dev, struct btd_profile *profile, int err) { + struct btd_profile *pending; + DBG("%s %s (%d)", profile->name, strerror(-err), -err); + if (dev->pending == NULL) + return; + + pending = dev->pending->data; dev->pending = g_slist_remove(dev->pending, profile); if (!err) @@ -1084,6 +1090,13 @@ void device_profile_connected(struct btd_device *dev, g_slist_append(dev->connected_profiles, profile); + /* Only continue connecting the next profile if it matches the first + * pending, otherwise it will trigger another connect to the same + * profile + */ + if (profile != pending) + return; + if (connect_next(dev) == 0) return; -- 2.11.0