diff --git a/src/adapter.c b/src/adapter.c
index 87e2d90..22d5ca0 100644
--- a/src/adapter.c
+++ b/src/adapter.c
if (device_is_authenticating(device))
device_cancel_authentication(device, TRUE);
- if (device_is_temporary(device)) {
+ if (device_is_temporary(device) && !device_is_retrying(device)) {
const char *path = device_get_path(device);
DBG("Removing temporary device %s", path);
diff --git a/src/device.c b/src/device.c
index 26df0d8..1c55e6d 100644
--- a/src/device.c
+++ b/src/device.c
struct btd_device *device;
struct agent *agent;
struct btd_adapter_pin_cb_iter *cb_iter;
+ uint8_t status;
+ guint retry_timer;
};
typedef enum {
bonding->agent = NULL;
}
+ if (bonding->retry_timer)
+ g_source_remove(bonding->retry_timer);
+
if (bonding->device)
bonding->device->bonding = NULL;
device->authr = NULL;
}
+bool device_is_retrying(struct btd_device *device)
+{
+ struct bonding_req *bonding = device->bonding;
+
+ return bonding && bonding->retry_timer > 0;
+}
+
void device_bonding_complete(struct btd_device *device, uint8_t status)
{
struct bonding_req *bonding = device->bonding;
diff --git a/src/device.h b/src/device.h
index f6ca79b..50f422d 100644
--- a/src/device.h
+++ b/src/device.h
void device_set_legacy(struct btd_device *device, bool legacy);
void device_set_rssi(struct btd_device *device, int8_t rssi);
gboolean device_is_connected(struct btd_device *device);
+bool device_is_retrying(struct btd_device *device);
void device_bonding_complete(struct btd_device *device, uint8_t status);
gboolean device_is_bonding(struct btd_device *device, const char *sender);
void device_bonding_failed(struct btd_device *device, uint8_t status);