Thread (5 messages) 5 messages, 4 authors, 2012-02-02
STALE5288d

[PATCH] device: Fix segmentation fault removing devices

From: Santiago Carot-Nemesio <hidden>
Date: 2012-01-31 15:59:05
Subsystem: the rest · Maintainer: Linus Torvalds

There is an unbalanced control regarding to the GATT channel and its
attachid, we have to to update the attach id value by setting it to
zero whenever we detach a GATT channel.
---
 src/device.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/src/device.c b/src/device.c
index c19acd4..9f749b7 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1734,6 +1734,7 @@ static void attrib_disconnected(gpointer user_data)
 	attrib_channel_detach(device->attrib, device->attachid);
 	g_attrib_unref(device->attrib);
 	device->attrib = NULL;
+	device->attachid = 0;
 
 	if (device->auto_connect == FALSE)
 		return;
@@ -1781,6 +1782,7 @@ static void primary_cb(GSList *services, guint8 status, gpointer user_data)
 
 	if (device->attios == NULL && device->attios_offline == NULL) {
 		attrib_channel_detach(device->attrib, device->attachid);
+		device->attachid = 0;
 		g_attrib_unref(device->attrib);
 		device->attrib = NULL;
 	} else
@@ -2854,7 +2856,7 @@ gboolean btd_device_remove_attio_callback(struct btd_device *device, guint id)
 	if (device->attios != NULL || device->attios_offline != NULL)
 		return TRUE;
 
-	if (device->attachid) {
+	if (device->attachid > 0) {
 		attrib_channel_detach(device->attrib, device->attachid);
 		device->attachid = 0;
 	}
-- 
1.7.9
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help