PropertyChanged signal of org.BlueZ.MediaTransport is processed in pa_bluetooth_transport_parse_property() which updates t->nrec. This is called by : - First by filter_cb() of bluetooth-util.c - Then by filter_cb()of module-bluetooth-device.c which retrieve value of t->nrec before calling parse function, then it checks if t->nrec has changed before updating bluetooth.nrec property. As t->nrec has alreday been changed during first process, property update is never performed. --- src/modules/bluetooth/module-bluetooth-device.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c index 0b12cc7..1559a3c 100644 --- a/src/modules/bluetooth/module-bluetooth-device.c +++ b/src/modules/bluetooth/module-bluetooth-device.c @@ -1814,7 +1814,8 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us } else if (dbus_message_is_signal(m, "org.bluez.MediaTransport", "PropertyChanged")) { DBusMessageIter arg_i; pa_bluetooth_transport *t; - pa_bool_t nrec; + const char *str; + int nrec = -1; t = (pa_bluetooth_transport *) pa_bluetooth_discovery_get_transport(u->discovery, u->transport); pa_assert(t); @@ -1824,11 +1825,14 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us goto fail; } - nrec = t->nrec; - if (pa_bluetooth_transport_parse_property(t, &arg_i) < 0) goto fail; + /* Update Noise reduction and echo cancellation if needed */ + str = pa_proplist_gets(u->source->proplist, "bluetooth.nrec"); + if (str != NULL) + nrec = pa_parse_boolean(str); + if (nrec != t->nrec) { pa_log_debug("dbus: property 'NREC' changed to value '%s'", t->nrec ? "True" : "False"); pa_proplist_sets(u->source->proplist, "bluetooth.nrec", t->nrec ? "1" : "0"); -- 1.7.9.5