dbus: Add support to remove device property signal

pull/267/head
Olivier Martin 2024-02-19 17:34:28 +01:00 committed by Olivier Martin
parent b193543fb0
commit b28a0422f0
2 changed files with 16 additions and 7 deletions

View File

@ -27,9 +27,9 @@ static void _on_device_connect(gatt_connection_t* connection) {
GError *error = NULL;
// Stop the timeout for connection
if (conn_context->connection_timeout) {
g_source_remove(conn_context->connection_timeout);
conn_context->connection_timeout = 0;
if (conn_context->connection_timeout_id) {
g_source_remove(conn_context->connection_timeout_id);
conn_context->connection_timeout_id = 0;
}
// Get list of objects belonging to Device Manager
@ -135,7 +135,7 @@ static gboolean _stop_connect_func(gpointer data) {
gattlib_context_t *conn_context = data;
// Reset the connection timeout
conn_context->connection_timeout = 0;
conn_context->connection_timeout_id = 0;
// We return FALSE when it is a one-off event
return FALSE;
@ -208,7 +208,7 @@ gatt_connection_t *gattlib_connect(void* adapter, const char *dst, unsigned long
}
// Register a handle for notification
g_signal_connect(device,
conn_context->on_handle_device_property_change_id = g_signal_connect(device,
"g-properties-changed",
G_CALLBACK (on_handle_device_property_change),
connection);
@ -234,7 +234,7 @@ gatt_connection_t *gattlib_connect(void* adapter, const char *dst, unsigned long
// and 'org.bluez.GattCharacteristic1' to be advertised at that moment.
conn_context->connection_loop = g_main_loop_new(NULL, 0);
conn_context->connection_timeout = g_timeout_add_seconds(CONNECT_TIMEOUT, _stop_connect_func,
conn_context->connection_timeout_id = g_timeout_add_seconds(CONNECT_TIMEOUT, _stop_connect_func,
conn_context->connection_loop);
g_main_loop_run(conn_context->connection_loop);
g_main_loop_unref(conn_context->connection_loop);
@ -311,6 +311,12 @@ int gattlib_disconnect(gatt_connection_t* connection) {
goto EXIT;
}
// Remove signal
if (conn_context->on_handle_device_property_change_id != 0) {
g_signal_handler_disconnect(conn_context->device, conn_context->on_handle_device_property_change_id);
conn_context->on_handle_device_property_change_id = 0;
}
org_bluez_device1_call_disconnect_sync(conn_context->device, NULL, &error);
if (error) {
GATTLIB_LOG(GATTLIB_ERROR, "Failed to disconnect DBus Bluez Device: %s", error->message);

View File

@ -47,7 +47,10 @@ typedef struct {
pthread_t event_thread;
GMainLoop *connection_loop;
// ID of the timeout to know if we managed to connect to the device
guint connection_timeout;
guint connection_timeout_id;
// ID of the device property change signal
guint on_handle_device_property_change_id;
// List of DBUS Object managed by 'adapter->device_manager'
GList *dbus_objects;