From 0bd428df04dfb5d280b9c90bffb40059b75a4428 Mon Sep 17 00:00:00 2001 From: Mikel Astiz Date: Thu, 22 Nov 2012 15:20:27 +0100 Subject: bluetooth: Run the discovery hook only when necessary This is a minor optimization too, but the main benefit is that it's makes the code easier to understand (I hope), since run_callback() won't be called at times when it's not needed. --- src/modules/bluetooth/bluetooth-util.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c index 19e6b47a..14368da6 100644 --- a/src/modules/bluetooth/bluetooth-util.c +++ b/src/modules/bluetooth/bluetooth-util.c @@ -516,6 +516,7 @@ static void get_properties_reply(DBusPendingCall *pending, void *userdata) { pa_bluetooth_device *d; pa_bluetooth_discovery *y; int valid; + bool old_any_connected; pa_assert_se(p = userdata); pa_assert_se(y = p->context_data); @@ -536,6 +537,9 @@ static void get_properties_reply(DBusPendingCall *pending, void *userdata) { pa_assert(p->call_data == d); + if (d != NULL) + old_any_connected = pa_bluetooth_device_any_audio_connected(d); + valid = dbus_message_get_type(r) == DBUS_MESSAGE_TYPE_ERROR ? -1 : 1; if (dbus_message_is_method_call(p->message, "org.bluez.Device", "GetProperties")) @@ -609,7 +613,7 @@ static void get_properties_reply(DBusPendingCall *pending, void *userdata) { } finish: - if (d != NULL) + if (d != NULL && old_any_connected != pa_bluetooth_device_any_audio_connected(d)) run_callback(d, FALSE); finish2: @@ -845,6 +849,7 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us if ((d = pa_hashmap_get(y->devices, dbus_message_get_path(m)))) { DBusMessageIter arg_i; + bool old_any_connected = pa_bluetooth_device_any_audio_connected(d); if (!dbus_message_iter_init(m, &arg_i)) { pa_log("Failed to parse PropertyChanged: %s", err.message); @@ -876,7 +881,8 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us goto fail; } - run_callback(d, FALSE); + if (old_any_connected != pa_bluetooth_device_any_audio_connected(d)) + run_callback(d, FALSE); } return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -- cgit v1.2.3