2022-06-23 06:37:47

by Youwan Wang

[permalink] [raw]
Subject: [PATCH] device: Fix not removing connected device

[bluetooth]# connect 40:EF:4C:0C:11:F0
Attempting to connect to 40:EF:4C:0C:11:F0
[CHG] Device 40:EF:4C:0C:11:F0 Connected: yes
Connection successful
[CHG] Device 40:EF:4C:0C:11:F0 ServicesResolved: yes
[UFO]# remove 40:EF:4C:0C:11:F0
[CHG] Device 40:EF:4C:0C:11:F0 ServicesResolved: no
Device has been removed
[CHG] Device 40:EF:4C:0C:11:F0 Connected: no
[bluetooth]# info 40:EF:4C:0C:11:F0
Device 40:EF:4C:0C:11:F0 (public)
Name: UFO
Alias: UFO
Class: 0x00240418
Icon: audio-headphones
Paired: yes
Trusted: no
Blocked: no
Connected: no
LegacyPairing: no
UUID: Headset
UUID: Audio Sink
UUID: A/V Remote Control Target
UUID: A/V Remote Control
UUID: Handsfree
UUID: Phonebook Access Server
---
src/adapter.c | 11 ++++++++++-
src/device.c | 5 +++--
src/device.h | 3 ++-
3 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index afefa1d5d..16da20034 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -7171,6 +7171,8 @@ static void adapter_remove_connection(struct btd_adapter *adapter,
struct btd_device *device,
uint8_t bdaddr_type)
{
+ bool remove_device = false;
+
DBG("");

if (!g_slist_find(adapter->connections, device)) {
@@ -7178,7 +7180,7 @@ static void adapter_remove_connection(struct btd_adapter *adapter,
return;
}

- device_remove_connection(device, bdaddr_type);
+ device_remove_connection(device, bdaddr_type, &remove_device);

if (device_is_authenticating(device))
device_cancel_authentication(device, TRUE);
@@ -7188,6 +7190,13 @@ static void adapter_remove_connection(struct btd_adapter *adapter,
return;

adapter->connections = g_slist_remove(adapter->connections, device);
+
+ if (remove_device) {
+ const char *path = device_get_path(device);
+
+ DBG("Removing temporary device %s", path);
+ btd_adapter_remove_device(adapter, device);
+ }
}

static void adapter_stop(struct btd_adapter *adapter)
diff --git a/src/device.c b/src/device.c
index 7b451e458..c5484ca7b 100644
--- a/src/device.c
+++ b/src/device.c
@@ -3073,7 +3073,8 @@ static void set_temporary_timer(struct btd_device *dev, unsigned int timeout)
dev, NULL);
}

-void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
+void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type,
+ bool *remove)
{
struct bearer_state *state = get_state(device, bdaddr_type);
DBusMessage *reply;
@@ -3159,7 +3160,7 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
DEVICE_INTERFACE, "Connected");

if (remove_device)
- set_temporary_timer(device, 0);
+ *remove = remove_device;
}

guint device_add_disconnect_watch(struct btd_device *device,
diff --git a/src/device.h b/src/device.h
index 960255d2b..d7f886224 100644
--- a/src/device.h
+++ b/src/device.h
@@ -123,7 +123,8 @@ int device_notify_pincode(struct btd_device *device, gboolean secure,
void device_cancel_authentication(struct btd_device *device, gboolean aborted);
gboolean device_is_authenticating(struct btd_device *device);
void device_add_connection(struct btd_device *dev, uint8_t bdaddr_type);
-void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type);
+void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type,
+ bool *remove);
void device_request_disconnect(struct btd_device *device, DBusMessage *msg);
bool device_is_disconnecting(struct btd_device *device);
void device_set_ltk_enc_size(struct btd_device *device, uint8_t enc_size);
--
2.20.1




2022-06-23 08:13:38

by bluez.test.bot

[permalink] [raw]
Subject: RE: device: Fix not removing connected device

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=653038

---Test result---

Test Summary:
CheckPatch PASS 1.13 seconds
GitLint PASS 0.75 seconds
Prep - Setup ELL PASS 51.93 seconds
Build - Prep PASS 0.83 seconds
Build - Configure PASS 10.19 seconds
Build - Make PASS 1774.49 seconds
Make Check PASS 12.25 seconds
Make Check w/Valgrind PASS 528.82 seconds
Make Distcheck PASS 281.37 seconds
Build w/ext ELL - Configure PASS 10.19 seconds
Build w/ext ELL - Make PASS 1750.64 seconds
Incremental Build with patchesPASS 0.00 seconds



---
Regards,
Linux Bluetooth

2022-06-23 23:41:33

by patchwork-bot+bluetooth

[permalink] [raw]
Subject: Re: [PATCH] device: Fix not removing connected device

Hello:

This patch was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <[email protected]>:

On Thu, 23 Jun 2022 14:29:53 +0800 you wrote:
> [bluetooth]# connect 40:EF:4C:0C:11:F0
> Attempting to connect to 40:EF:4C:0C:11:F0
> [CHG] Device 40:EF:4C:0C:11:F0 Connected: yes
> Connection successful
> [CHG] Device 40:EF:4C:0C:11:F0 ServicesResolved: yes
> [UFO]# remove 40:EF:4C:0C:11:F0
> [CHG] Device 40:EF:4C:0C:11:F0 ServicesResolved: no
> Device has been removed
> [CHG] Device 40:EF:4C:0C:11:F0 Connected: no
> [bluetooth]# info 40:EF:4C:0C:11:F0
> Device 40:EF:4C:0C:11:F0 (public)
> Name: UFO
> Alias: UFO
> Class: 0x00240418
> Icon: audio-headphones
> Paired: yes
> Trusted: no
> Blocked: no
> Connected: no
> LegacyPairing: no
> UUID: Headset
> UUID: Audio Sink
> UUID: A/V Remote Control Target
> UUID: A/V Remote Control
> UUID: Handsfree
> UUID: Phonebook Access Server
>
> [...]

Here is the summary with links:
- device: Fix not removing connected device
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=65f7faf5a3d0

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html