linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH BlueZ] input: Fix not adding watches when io channel is connected
@ 2012-06-19 10:02 Luiz Augusto von Dentz
  2012-06-19 10:13 ` Bastien Nocera
  0 siblings, 1 reply; 2+ messages in thread
From: Luiz Augusto von Dentz @ 2012-06-19 10:02 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This can leave dangling pointers in case one of the channel is never
connected which cause -EALREADY to be returned by
input_device_set_channel next time the device attempts to connect.
---
 input/device.c |   23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/input/device.c b/input/device.c
index 0e3f4a9..ba27c6a 100644
--- a/input/device.c
+++ b/input/device.c
@@ -387,6 +387,11 @@ static gboolean intr_watch_cb(GIOChannel *chan, GIOCondition cond, gpointer data
 	struct input_conn *iconn = data;
 	struct input_device *idev = iconn->idev;
 	gboolean connected = FALSE;
+	char address[18];
+
+	ba2str(&iconn->idev->dst, address);
+
+	DBG("Device %s disconnected", address);
 
 	/* Checking for ctrl_watch avoids a double g_io_channel_shutdown since
 	 * it's likely that ctrl_watch_cb has been queued for dispatching in
@@ -415,6 +420,11 @@ static gboolean intr_watch_cb(GIOChannel *chan, GIOCondition cond, gpointer data
 static gboolean ctrl_watch_cb(GIOChannel *chan, GIOCondition cond, gpointer data)
 {
 	struct input_conn *iconn = data;
+	char address[18];
+
+	ba2str(&iconn->idev->dst, address);
+
+	DBG("Device %s disconnected", address);
 
 	/* Checking for intr_watch avoids a double g_io_channel_shutdown since
 	 * it's likely that intr_watch_cb has been queued for dispatching in
@@ -811,13 +821,6 @@ static int input_device_connected(struct input_device *idev,
 	if (err < 0)
 		return err;
 
-	iconn->intr_watch = g_io_add_watch(iconn->intr_io,
-					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
-					intr_watch_cb, iconn);
-	iconn->ctrl_watch = g_io_add_watch(iconn->ctrl_io,
-					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
-					ctrl_watch_cb, iconn);
-
 	connected = TRUE;
 	emit_property_changed(idev->conn, idev->path, INPUT_DEVICE_INTERFACE,
 				"Connected", DBUS_TYPE_BOOLEAN, &connected);
@@ -1272,11 +1275,17 @@ int input_device_set_channel(const bdaddr_t *src, const bdaddr_t *dst, int psm,
 		if (iconn->ctrl_io)
 			return -EALREADY;
 		iconn->ctrl_io = g_io_channel_ref(io);
+		iconn->ctrl_watch = g_io_add_watch(iconn->ctrl_io,
+					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+					ctrl_watch_cb, iconn);
 		break;
 	case L2CAP_PSM_HIDP_INTR:
 		if (iconn->intr_io)
 			return -EALREADY;
 		iconn->intr_io = g_io_channel_ref(io);
+		iconn->intr_watch = g_io_add_watch(iconn->intr_io,
+					G_IO_HUP | G_IO_ERR | G_IO_NVAL,
+					intr_watch_cb, iconn);
 		break;
 	}
 
-- 
1.7.10.2


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH BlueZ] input: Fix not adding watches when io channel is connected
  2012-06-19 10:02 [PATCH BlueZ] input: Fix not adding watches when io channel is connected Luiz Augusto von Dentz
@ 2012-06-19 10:13 ` Bastien Nocera
  0 siblings, 0 replies; 2+ messages in thread
From: Bastien Nocera @ 2012-06-19 10:13 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth

Em Tue, 2012-06-19 às 13:02 +0300, Luiz Augusto von Dentz escreveu:
> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> 
> This can leave dangling pointers in case one of the channel is never
> connected which cause -EALREADY to be returned by
> input_device_set_channel next time the device attempts to connect.

This removes the warning when the PS3 BD Remote tries to connect, but
doesn't fix the original problem. Probably something to include
nonetheless.

Cheers


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-06-19 10:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-19 10:02 [PATCH BlueZ] input: Fix not adding watches when io channel is connected Luiz Augusto von Dentz
2012-06-19 10:13 ` Bastien Nocera

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).