diff --git a/android/bas.c b/android/bas.c
index 7342895..dde05ee 100644
--- a/android/bas.c
+++ b/android/bas.c
#include "lib/uuid.h"
#include "src/shared/util.h"
+#include "src/shared/queue.h"
#include "attrib/gattrib.h"
#include "attrib/att.h"
uint16_t handle;
uint16_t ccc_handle;
guint id;
+ struct queue *gatt_op;
};
+struct gatt_request {
+ unsigned int id;
+ struct bt_bas *bas;
+ void *user_data;
+};
+
+static void destroy_gatt_req(struct gatt_request *req)
+{
+ queue_remove(req->bas->gatt_op, req);
+ bt_bas_unref(req->bas);
+ free(req);
+}
+
static void bas_free(struct bt_bas *bas)
{
bt_bas_detach(bas);
g_free(bas->primary);
+ queue_destroy(bas->gatt_op, (void *) destroy_gatt_req);
g_free(bas);
}
if (!bas)
return NULL;
+ bas->gatt_op = queue_new();
+ if (!bas->gatt_op) {
+ bas_free(bas);
+ return NULL;
+ }
+
if (primary)
bas->primary = g_memdup(primary, sizeof(*bas->primary));
return true;
}
+static void cancel_gatt_req(struct gatt_request *req)
+{
+ if (g_attrib_cancel(req->bas->attrib, req->id))
+ destroy_gatt_req(req);
+}
+
void bt_bas_detach(struct bt_bas *bas)
{
if (!bas || !bas->attrib)
bas->id = 0;
}
+ queue_foreach(bas->gatt_op, (void *) cancel_gatt_req, NULL);
g_attrib_unref(bas->attrib);
bas->attrib = NULL;
}