diff --git a/dbus/gattlib_adapter.c b/dbus/gattlib_adapter.c index 5a94d04..07e76f9 100644 --- a/dbus/gattlib_adapter.c +++ b/dbus/gattlib_adapter.c @@ -244,7 +244,7 @@ int gattlib_adapter_scan_enable_with_filter(void *adapter, uuid_t **uuid_list, i // Run Glib loop for 'timeout' seconds gattlib_adapter->scan_loop = g_main_loop_new(NULL, 0); - g_timeout_add_seconds(timeout, stop_scan_func, gattlib_adapter->scan_loop); + gattlib_adapter->timeout_id = g_timeout_add_seconds(timeout, stop_scan_func, gattlib_adapter->scan_loop); g_main_loop_run(gattlib_adapter->scan_loop); // Note: The function only resumes when loop timeout as expired or g_main_loop_quit has been called. @@ -280,6 +280,9 @@ int gattlib_adapter_scan_disable(void* adapter) { org_bluez_adapter1_call_stop_discovery_sync(gattlib_adapter->adapter_proxy, NULL, &error); // Ignore the error + // Remove timeout + g_source_remove(gattlib_adapter->timeout_id); + // Ensure the scan loop is quit g_main_loop_quit(gattlib_adapter->scan_loop); g_main_loop_unref(gattlib_adapter->scan_loop); diff --git a/dbus/gattlib_internal.h b/dbus/gattlib_internal.h index ce334fd..e606a28 100644 --- a/dbus/gattlib_internal.h +++ b/dbus/gattlib_internal.h @@ -58,6 +58,7 @@ typedef struct { struct gattlib_adapter { OrgBluezAdapter1 *adapter_proxy; GMainLoop *scan_loop; + guint timeout_id; }; struct dbus_characteristic {