2022-06-23 04:44:32

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 | 4 ++--
src/device.h | 3 ++-
3 files changed, 14 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..24d88929e 100644
--- a/src/device.c
+++ b/src/device.c
@@ -3073,7 +3073,7 @@ 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 +3159,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 06:26:57

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

---Test result---

Test Summary:
CheckPatch FAIL 1.49 seconds
GitLint PASS 0.95 seconds
Prep - Setup ELL PASS 41.48 seconds
Build - Prep PASS 0.68 seconds
Build - Configure PASS 8.06 seconds
Build - Make PASS 1196.70 seconds
Make Check PASS 11.80 seconds
Make Check w/Valgrind PASS 439.72 seconds
Make Distcheck PASS 228.36 seconds
Build w/ext ELL - Configure PASS 8.08 seconds
Build w/ext ELL - Make PASS 1187.94 seconds
Incremental Build with patchesPASS 0.00 seconds

Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
Output:
device: Fix not removing connected device
WARNING:LONG_LINE: line length of 91 exceeds 80 columns
#131: FILE: src/device.c:3076:
+void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type, bool *remove)

/github/workspace/src/12891800.patch total: 0 errors, 1 warnings, 54 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
mechanically convert to the typical style using --fix or --fix-inplace.

/github/workspace/src/12891800.patch has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
them to the maintainer, see CHECKPATCH in MAINTAINERS.




---
Regards,
Linux Bluetooth