Message ID | 20240929022256.3271298-1-quic_chejiang@quicinc.com |
---|---|
State | New |
Headers | show |
Series | [v5] device: Remove device after all bearers are disconnected | expand |
This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=893665 ---Test result--- Test Summary: CheckPatch PASS 0.39 seconds GitLint PASS 0.26 seconds BuildEll PASS 24.01 seconds BluezMake PASS 1596.11 seconds MakeCheck PASS 12.94 seconds MakeDistcheck PASS 176.72 seconds CheckValgrind PASS 252.22 seconds CheckSmatch PASS 352.81 seconds bluezmakeextell PASS 117.37 seconds IncrementalBuild PASS 1490.21 seconds ScanBuild PASS 1024.31 seconds --- Regards, Linux Bluetooth
Hello: This patch was applied to bluetooth/bluez.git (master) by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>: On Sun, 29 Sep 2024 10:22:56 +0800 you wrote: > For a dual-mode remote, both BR/EDR and BLE may be connected, > RemoveDevice should be handled after all bearers are disconnects. > Otherwise, if msg is removed, but not all connection are dropped, > this function returns before *remove is updated, then after all > connections are dropped, but device->disconnects is NULL, > remove_device is not updated. Consequently *remove is not set to > true. Remove device is not performed in adapter_remove_connection. > > [...] Here is the summary with links: - [v5] device: Remove device after all bearers are disconnected https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=38734e020513 You are awesome, thank you!
diff --git a/src/device.c b/src/device.c index f8f61e643..7585184de 100644 --- a/src/device.c +++ b/src/device.c @@ -3488,18 +3488,6 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type, device->connect = NULL; } - while (device->disconnects) { - DBusMessage *msg = device->disconnects->data; - - if (dbus_message_is_method_call(msg, ADAPTER_INTERFACE, - "RemoveDevice")) - remove_device = true; - - g_dbus_send_reply(dbus_conn, msg, DBUS_TYPE_INVALID); - device->disconnects = g_slist_remove(device->disconnects, msg); - dbus_message_unref(msg); - } - /* Check paired status of both bearers since it's possible to be * paired but not connected via link key to LTK conversion. */ @@ -3539,6 +3527,19 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type, g_dbus_emit_property_changed(dbus_conn, device->path, DEVICE_INTERFACE, "Connected"); + /* remove device only if both bearers are disconnected */ + while (device->disconnects) { + DBusMessage *msg = device->disconnects->data; + + if (dbus_message_is_method_call(msg, ADAPTER_INTERFACE, + "RemoveDevice")) + remove_device = true; + + g_dbus_send_reply(dbus_conn, msg, DBUS_TYPE_INVALID); + device->disconnects = g_slist_remove(device->disconnects, msg); + dbus_message_unref(msg); + } + if (remove_device) *remove = remove_device; }