From: Mikel Astiz <mikel.astiz@xxxxxxxxxxxx> Sending v5 with the following changes: - Leaked D-Bus matches removed as pointed out by Jo?o Paulo. - Several warning messages added as suggested by Tanu. - Minor code refactoring in pa_bluetooth_transport_release(). Again, the last 5 patches are sent for completeness despite the general consensus not to merge them. The patchset is very similar to v4 as you can see in the following diff: diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c index a7b146d..27af48a 100644 --- a/src/modules/bluetooth/bluetooth-util.c +++ b/src/modules/bluetooth/bluetooth-util.c @@ -1385,8 +1385,10 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us if (pa_streq(interface, "org.bluez.Device1")) { pa_bluetooth_device *d; - if ((d = pa_hashmap_remove(y->devices, path))) { - pa_log_debug("Device %s removed", d->path); + if (!(d = pa_hashmap_remove(y->devices, path))) + pa_log_warn("Unknown device removed %s", path); + else { + pa_log_debug("Device %s removed", path); run_callback(d, true); device_free(d); } @@ -1416,8 +1418,10 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us if (pa_streq(interface, "org.bluez.Device1")) { pa_bluetooth_device *d; - if (!(d = pa_hashmap_get(y->devices, dbus_message_get_path(m)))) - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; /* Device not being tracked */ + if (!(d = pa_hashmap_get(y->devices, dbus_message_get_path(m)))) { + pa_log_warn("Property change in unknown device %s", dbus_message_get_path(m)); + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; + } parse_device_properties(d, &arg_i, true); } else if (pa_streq(interface, "org.bluez.MediaTransport1")) { @@ -1586,11 +1590,14 @@ void pa_bluetooth_transport_release(pa_bluetooth_transport *t) { pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, "org.bluez.MediaTransport", "Release")); pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_STRING, &accesstype, DBUS_TYPE_INVALID)); - } else if (t->state <= PA_BLUETOOTH_TRANSPORT_STATE_IDLE) { - pa_log_info("Transport %s auto-released by BlueZ or already released", t->path); - return; } else { pa_assert(t->device->discovery->version == BLUEZ_VERSION_5); + + if (t->state <= PA_BLUETOOTH_TRANSPORT_STATE_IDLE) { + pa_log_info("Transport %s auto-released by BlueZ or already released", t->path); + return; + } + pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, "org.bluez.MediaTransport1", "Release")); } @@ -2245,6 +2252,10 @@ void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y) { "type='signal',sender='org.bluez',interface='org.bluez.MediaTransport',member='PropertyChanged'", "type='signal',sender='org.bluez',interface='org.freedesktop.DBus.ObjectManager',member='InterfacesAdded'", "type='signal',sender='org.bluez',interface='org.freedesktop.DBus.ObjectManager',member='InterfacesRemoved'", + "type='signal',sender='org.bluez',interface='org.freedesktop.DBus.Properties',member='PropertiesChanged'" + ",arg0='org.bluez.Device1'", + "type='signal',interface='org.freedesktop.DBus.Properties',member='PropertiesChanged'" + ",arg0='org.bluez.MediaTransport1'", NULL); if (y->filter_added) Mikel Astiz (10): bluetooth: Support ObjectManager interface add/remove bluetooth: Support Properties.PropertiesChanged signal bluetooth: Parse media transport's properties bluetooth: Support media transport's State property bluetooth: Update to new BlueZ 5 transport acquire/release API bluetooth: Support transport auto-release bluetooth: Register HSP/HFP endpoints in BlueZ 5 Media API bluetooth: Handle transports configured before UUID received bluetooth: Update to new property setter API in BlueZ 5 bluetooth: Update to volume control in BlueZ 5 Vinicius Costa Gomes (1): bluetooth: Add HFP 1.6 codec ID src/modules/bluetooth/bluetooth-util.c | 359 +++++++++++++++++++++--- src/modules/bluetooth/module-bluetooth-device.c | 8 +- 2 files changed, 327 insertions(+), 40 deletions(-) -- 1.8.1.4