diff --git a/android/gatt.c b/android/gatt.c
index 53131d4..004063c 100644
--- a/android/gatt.c
+++ b/android/gatt.c
notification->ind_id);
}
+static void connection_cleanup(struct gatt_device *device)
+{
+ if (device->watch_id) {
+ g_source_remove(device->watch_id);
+ device->watch_id = 0;
+ }
+
+ if (device->att_io) {
+ g_io_channel_shutdown(device->att_io, FALSE, NULL);
+ g_io_channel_unref(device->att_io);
+ device->att_io = NULL;
+ }
+
+ if (device->attrib) {
+ GAttrib *attrib = device->attrib;
+ device->attrib = NULL;
+ g_attrib_cancel_all(attrib);
+ g_attrib_unref(attrib);
+ }
+}
+
static void destroy_device(void *data)
{
struct gatt_device *dev = data;
if (!dev)
return;
+ if (dev->conn_id)
+ connection_cleanup(dev);
+
queue_destroy(dev->clients, NULL);
queue_destroy(dev->services, destroy_service);
free(dev);
status);
}
-static void connection_cleanup(struct gatt_device *device)
-{
- if (device->watch_id) {
- g_source_remove(device->watch_id);
- device->watch_id = 0;
- }
-
- if (device->att_io) {
- g_io_channel_shutdown(device->att_io, FALSE, NULL);
- g_io_channel_unref(device->att_io);
- device->att_io = NULL;
- }
-
- if (device->attrib) {
- GAttrib *attrib = device->attrib;
- device->attrib = NULL;
- g_attrib_cancel_all(attrib);
- g_attrib_unref(attrib);
- }
-}
-
static void send_client_disconnect_notify(int32_t id, struct gatt_device *dev,
int32_t status)
{