Hi, On Tue, Jun 21, 2022 at 6:38 PM 王有万 <wangyouwan@xxxxxxxxxxxxx> wrote: > > thank you! > This modification is consistent with my code > https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=5ebc2b5a3e48dbe67a2d315979b096a1b4d1eb99 > > Here are my steps, I found that it takes two times to remove the connected device > When removing for the first time btd_adapter_remove_device(dev->adapter, dev) func will not be called > > [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 (00001108-0000-1000-8000-00805f9b34fb) > UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb) > UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb) > UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb) > UUID: Handsfree (0000111e-0000-1000-8000-00805f9b34fb) > UUID: Phonebook Access Server (0000112f-0000-1000-8000-00805f9b34fb) > [bluetooth]# > > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/device.c:btd_device_set_temporary() temporary 1 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37a84200: device 40:EF:4C:0C:11:F0 profile avrcp-controller state changed: connected -> disconnecting (0) > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avrcp.c:avrcp_disconnect() path /org/bluez/hci0/dev_40_EF_4C_0C_11_F0 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37aaeac0: device 40:EF:4C:0C:11:F0 profile audio-avrcp-target state changed: connected -> disconnected (0) > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37a84200: device 40:EF:4C:0C:11:F0 profile avrcp-controller state changed: disconnecting -> disconnected (0) > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avrcp.c:controller_destroy() 0x558c37a4e600 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avrcp.c:target_destroy() 0x558c37a47e20 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avctp.c:avctp_set_state() AVCTP Disconnected > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avctp.c:avctp_disconnected() AVCTP: closing uinput for 40:EF:4C:0C:11:F0 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37aaeb30: device 40:EF:4C:0C:11:F0 profile a2dp-sink state changed: connected -> disconnecting (0) > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/a2dp.c:a2dp_sink_disconnect() path /org/bluez/hci0/dev_40_EF_4C_0C_11_F0 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37a80790: device 40:EF:4C:0C:11:F0 profile Hands-Free Voice gateway state changed: connected -> disconnecting (0) > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37a869e0: device 40:EF:4C:0C:11:F0 profile Phone Book Access state changed: connected -> disconnecting (0) > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/adapter.c:remove_accept_list_complete() 40:EF:4C:0C:11:F0 removed from kernel accept list > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37a869e0: device 40:EF:4C:0C:11:F0 profile Phone Book Access state changed: disconnecting -> disconnected (0) > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37a869e0: ref=1 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37a80790: device 40:EF:4C:0C:11:F0 profile Hands-Free Voice gateway state changed: disconnecting -> disconnected (0) > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37a80790: ref=2 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:session_cb() > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:avdtp_parse_resp() CLOSE request succeeded > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:avdtp_sep_set_state() stream state changed: STREAMING -> CLOSING > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/a2dp.c:close_cfm() Source 0x558c37a73050: Close_Cfm > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:avdtp_sep_set_state() stream state changed: CLOSING -> IDLE > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/transport.c:media_transport_remove_owner() Transport /org/bluez/hci0/dev_40_EF_4C_0C_11_F0/sep1/fd10 Owner :1.1779 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/transport.c:media_owner_free() Owner :1.1779 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/transport.c:transport_set_state() State changed /org/bluez/hci0/dev_40_EF_4C_0C_11_F0/sep1/fd10: TRANSPORT_STATE_ACTIVE -> TRANSPORT_STATE_IDLE > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/a2dp.c:a2dp_sep_unlock() SEP 0x558c37a73050 unlocked > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:avdtp_unref() 0x558c37a61720: ref=1 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37aaeb30: device 40:EF:4C:0C:11:F0 profile a2dp-sink state changed: disconnecting -> disconnected (0) > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:avdtp_unref() 0x558c37a61720: ref=0 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:avdtp_ref() 0x558c37a61720: ref=1 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:set_disconnect_timer() timeout 0 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:avdtp_ref() 0x558c37a61720: ref=2 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:connection_lost() Disconnected from 40:EF:4C:0C:11:F0 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/sink.c:sink_set_state() State changed /org/bluez/hci0/dev_40_EF_4C_0C_11_F0: SINK_STATE_PLAYING -> SINK_STATE_DISCONNECTED > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/a2dp.c:channel_remove() chan 0x558c37a4e530 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:avdtp_unref() 0x558c37a61720: ref=1 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:avdtp_unref() 0x558c37a61720: ref=0 > 6月 20 15:05:41 uos-PC bluetoothd[10094]: profiles/audio/avdtp.c:avdtp_free() 0x558c37a61720 > 6月 20 15:05:44 uos-PC bluetoothd[10094]: src/adapter.c:dev_disconnected() Device 40:EF:4C:0C:11:F0 disconnected, reason 2 > 6月 20 15:05:44 uos-PC bluetoothd[10094]: src/adapter.c:adapter_remove_connection() > 6月 20 15:05:44 uos-PC bluetoothd[10094]: plugins/policy.c:disconnect_cb() reason 2 > 6月 20 15:05:44 uos-PC bluetoothd[10094]: src/adapter.c:bonding_attempt_complete() hci0 bdaddr 40:EF:4C:0C:11:F0 type 0 status 0xe > 6月 20 15:05:44 uos-PC bluetoothd[10094]: src/device.c:device_bonding_complete() bonding (nil) status 0x0e > 6月 20 15:05:44 uos-PC bluetoothd[10094]: src/device.c:device_bonding_failed() status 14 > 6月 20 15:05:44 uos-PC bluetoothd[10094]: src/adapter.c:resume_discovery() > > > [bluetooth]# remove 40:EF:4C:0C:11:F0 > > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/device.c:device_remove() Removing device /org/bluez/hci0/dev_40_EF_4C_0C_11_F0 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37a84200: device 40:EF:4C:0C:11:F0 profile avrcp-controller state changed: disconnected -> unavailable (0) > 6月 20 15:08:32 uos-PC bluetoothd[10094]: profiles/audio/control.c:path_unregister() Unregistered interface org.bluez.MediaControl1 on path /org/bluez/hci0/dev_40_EF_4C_0C_11_F0 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37aaeac0: ref=1 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37a84200: ref=1 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37a84200: ref=0 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37aaeac0: device 40:EF:4C:0C:11:F0 profile audio-avrcp-target state changed: disconnected -> unavailable (0) > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37aaeac0: ref=0 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37aaeb30: device 40:EF:4C:0C:11:F0 profile a2dp-sink state changed: disconnected -> unavailable (0) > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37aaeb30: ref=2 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: profiles/audio/sink.c:sink_unregister() /org/bluez/hci0/dev_40_EF_4C_0C_11_F0 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37aaeb30: ref=1 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37aaeb30: ref=0 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37a80790: device 40:EF:4C:0C:11:F0 profile Hands-Free Voice gateway state changed: disconnected -> unavailable (0) > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37a80790: ref=1 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/profile.c:ext_device_remove() Hands-Free Voice gateway > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37a80790: ref=0 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:change_state() 0x558c37a869e0: device 40:EF:4C:0C:11:F0 profile Phone Book Access state changed: disconnected -> unavailable (0) > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/profile.c:ext_device_remove() Phone Book Access > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/service.c:btd_service_unref() 0x558c37a869e0: ref=0 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/device.c:btd_device_unref() Freeing device /org/bluez/hci0/dev_40_EF_4C_0C_11_F0 > 6月 20 15:08:32 uos-PC bluetoothd[10094]: src/device.c:device_free() 0x558c37a93860 How about the following fix: https://patchwork.kernel.org/project/bluetooth/patch/20220622190053.2605233-1-luiz.dentz@xxxxxxxxx/ > ------------------ Original ------------------ > From: "Luiz Augusto von Dentz"<luiz.dentz@xxxxxxxxx>; > Date: Wed, Jun 22, 2022 02:39 AM > To: "Youwan Wang"<wangyouwan@xxxxxxxxxxxxx>; > Cc: "linux-bluetooth@xxxxxxxxxxxxxxx"<linux-bluetooth@xxxxxxxxxxxxxxx>; > Subject: Re: [PATCH] device: Fix timeout=1 to remove the device immediately > > Hi Youwan, > > On Tue, Jun 21, 2022 at 6:55 AM Youwan Wang <wangyouwan@xxxxxxxxxxxxx> wrote: > > > > When I use bluetoothctl to remove a device, > > I find that the device has not been deleted. > > > > static void set_temporary_timer(device, 0) > > { > > ...... > > if (!timeout) > > return; > > ...... > > } > > > > Now I want to delete the connected device > > when call remove. > > I don't know whether this modification is > > feasible, please give me some suggestions. > > --- > > src/device.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/src/device.c b/src/device.c > > index 7b451e458..d38ad74fc 100644 > > --- a/src/device.c > > +++ b/src/device.c > > @@ -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); > > + set_temporary_timer(device, 1); > > } > > Don't think this is right, in fact the original code could have been > clearer since all we want is to call clear_temporary_timeout thus why > we passed 0, perhaps you are after the following fix: > > https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/?id=5ebc2b5a3e48dbe67a2d315979b096a1b4d1eb99 > > > guint device_add_disconnect_watch(struct btd_device *device, > > -- > > 2.20.1 > > > > > > > > > -- > Luiz Augusto von Dentz -- Luiz Augusto von Dentz