[Bluez PATCH] input/device: Notify failure if ctrl disconnect when waiting intr

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Archie Pusaka <apusaka@xxxxxxxxxxxx>

On some rare occasions, the peer HID device might disconnect the ctrl
channel when we are trying to connect the intr channel. If this
happens, interrupt_connect_cb() will not be called by btio, and we
will be stuck in "connecting" state. Any future connection attempt to
the peer device will fail because of "busy".

This patch prevents that by checking if we need to report connection
failure when the ctrl channel is disconnected.

Reviewed-by: Sonny Sasaka <sonnysasaka@xxxxxxxxxxxx>
---

 profiles/input/device.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/profiles/input/device.c b/profiles/input/device.c
index ff4aa771ac..e2ac6ea603 100644
--- a/profiles/input/device.c
+++ b/profiles/input/device.c
@@ -581,6 +581,13 @@ static gboolean ctrl_watch_cb(GIOChannel *chan, GIOCondition cond, gpointer data
 	if (idev->intr_io && !(cond & G_IO_NVAL))
 		g_io_channel_shutdown(idev->intr_io, TRUE, NULL);
 
+	/* It's possible this is triggered while the intr channel is not even
+	 * connected yet, therefore we are still in the connecting state.
+	 */
+	if (btd_service_get_state(idev->service) ==
+						BTD_SERVICE_STATE_CONNECTING)
+		btd_service_connecting_complete(idev->service, -EIO);
+
 	if (!idev->intr_io && idev->virtual_cable_unplug)
 		virtual_cable_unplug(idev);
 
-- 
2.36.0.550.gb090851708-goog




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux