diff --git a/lib/ble/ble_bluez.c b/lib/ble/ble_bluez.c index a68b0dea..f912a2dd 100644 --- a/lib/ble/ble_bluez.c +++ b/lib/ble/ble_bluez.c @@ -373,9 +373,9 @@ static int properties(struct ble_backend* b, const char* path, const char* inter } if (!strcmp(interface, DEVICE_IF)) { struct bluez_link* l = find_device(b, path); - if (l && ((connected == 0 && l->connected) || (resolved == 0 && l->resolved))) + if (l && ((connected == 0 && (!l->outgoing || l->connected)) || (resolved == 0 && l->resolved))) link_error(l, connected == 0 ? "device disconnected" : "GATT services invalidated"); - else if (l && l->outgoing) { + else if (l && l->outgoing && (connected >= 0 || resolved >= 0)) { if (connected >= 0) l->connected = connected; if (resolved >= 0) l->resolved = resolved; DEBUG_DEBUG(CAT, "BLE BlueZ readiness link=%llu connected=%d resolved=%d opened=%d", diff --git a/lib/ble/tests/test_ble_bluez.c b/lib/ble/tests/test_ble_bluez.c index 75bdc8a5..36151f14 100644 --- a/lib/ble/tests/test_ble_bluez.c +++ b/lib/ble/tests/test_ble_bluez.c @@ -87,7 +87,8 @@ static int remote_state(sd_bus* b, const char* path, const char* i, const char* } static const sd_bus_vtable device_vtable[] = { SD_BUS_VTABLE_START(0), SD_BUS_METHOD("Connect", "", "", simple, SD_BUS_VTABLE_UNPRIVILEGED), - SD_BUS_PROPERTY("Connected", "b", remote_state, 0, 0), SD_BUS_PROPERTY("ServicesResolved", "b", remote_state, 0, 0), + SD_BUS_PROPERTY("Connected", "b", remote_state, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), + SD_BUS_PROPERTY("ServicesResolved", "b", remote_state, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), SD_BUS_VTABLE_END }; static const sd_bus_vtable remote_vtable[] = {