diff --git a/spa/plugins/bluez5/bluez5-dbus.c b/spa/plugins/bluez5/bluez5-dbus.c index f367db992..791bbfe55 100644 --- a/spa/plugins/bluez5/bluez5-dbus.c +++ b/spa/plugins/bluez5/bluez5-dbus.c @@ -113,6 +113,7 @@ struct spa_bt_monitor { unsigned int filters_added:1; unsigned int objects_listed:1; + DBusPendingCall *get_managed_objects_call; struct spa_bt_backend *backend; struct spa_bt_backend *backends[BACKEND_NUM]; @@ -4259,6 +4260,9 @@ static void get_managed_objects_reply(DBusPendingCall *pending, void *user_data) DBusMessage *r; DBusMessageIter it[6]; + spa_assert(pending == monitor->get_managed_objects_call); + monitor->get_managed_objects_call = NULL; + r = dbus_pending_call_steal_reply(pending); if (r == NULL) return; @@ -4316,6 +4320,8 @@ static void get_managed_objects(struct spa_bt_monitor *monitor) dbus_connection_send_with_reply(monitor->conn, m, &call, -1); dbus_pending_call_set_notify(call, get_managed_objects_reply, monitor, NULL); dbus_message_unref(m); + + monitor->get_managed_objects_call = call; } static void check_name_owner_reply(DBusPendingCall *pending, void *user_data) @@ -4695,6 +4701,11 @@ static int impl_clear(struct spa_handle *handle) monitor->filters_added = false; } + if (monitor->get_managed_objects_call) { + dbus_pending_call_cancel(monitor->get_managed_objects_call); + dbus_pending_call_unref(monitor->get_managed_objects_call); + } + spa_list_consume(t, &monitor->transport_list, link) spa_bt_transport_free(t); spa_list_consume(ep, &monitor->remote_endpoint_list, link)