[Bug 280878] Re: bluetoothd crashed with SIGSEGV in g_main_context_dispatch()

Mario Limonciello superm1 at ubuntu.com
Fri Aug 7 19:27:59 BST 2009


This was fixed in c82739046f031f32e3e66128062818eea2fc9e9e (v4.31) by
converting to BtIO's API.

Author: Johan Hedberg <johan.hedberg at nokia.com>  2009-02-19 13:08:20
Committer: Johan Hedberg <johan.hedberg at nokia.com>  2009-02-19 13:08:20
Parent: 8c26ea9f1865757aa796ff0ef7042bfb4c2bb6e8 (Add missing comma)
Child:  e777c55aa7cd84fe63bcdee16acde8d1a293b928 (Make use of g_error_free instead of g_clear_error when possible.)
Branches: master, remotes/origin/master
Follows: 4.30
Precedes: 4.31

    Convert HSP/HFP to use btio confirm_cb

------------------------------- audio/manager.c -------------------------------
index 1eb1790..35f9c6e 100644
@@ -403,6 +403,8 @@ static void auth_cb(DBusError *derr, void *user_data)
 {
 	struct audio_device *device = user_data;
 	const char *uuid;
+	GError *err = NULL;
+	GIOChannel *io;
 
 	if (get_hfp_active(device))
 		uuid = HFP_AG_UUID;
@@ -411,20 +413,21 @@ static void auth_cb(DBusError *derr, void *user_data)
 
 	if (derr && dbus_error_is_set(derr)) {
 		error("Access denied: %s", derr->message);
-
 		headset_set_state(device, HEADSET_STATE_DISCONNECTED);
-	} else {
-		char hs_address[18];
+		return;
+	}
 
-		ba2str(&device->dst, hs_address);
-		debug("Accepted headset connection from %s for %s",
-						hs_address, device->path);
+	io = headset_get_rfcomm(device);
 
-		headset_set_authorized(device);
+	if (!bt_io_accept(io, headset_connect_cb, device, NULL, &err)) {
+		error("bt_io_accept: %s", err->message);
+		g_error_free(err);
+		headset_set_state(device, HEADSET_STATE_DISCONNECTED);
+		return;
 	}
 }
 
-static void ag_io_cb(GIOChannel *chan, GError *err, gpointer data)
+static void ag_confirm(GIOChannel *chan, gpointer data)
 {
 	const char *server_uuid, *remote_uuid;
 	uint16_t svclass;
@@ -432,22 +435,17 @@ static void ag_io_cb(GIOChannel *chan, GError *err, gpointer data)
 	gboolean hfp_active;
 	bdaddr_t src, dst;
 	int perr;
-	GError *gerr = NULL;
+	GError *err = NULL;
 	uint8_t ch;
 
-	if (err) {
-		error("%s", err->message);
-		return;
-	}
-
-	bt_io_get(chan, BT_IO_RFCOMM, &gerr,
+	bt_io_get(chan, BT_IO_RFCOMM, &err,
 			BT_IO_OPT_SOURCE_BDADDR, &src,
 			BT_IO_OPT_DEST_BDADDR, &dst,
 			BT_IO_OPT_CHANNEL, &ch,
 			BT_IO_OPT_INVALID);
-	if (gerr) {
-		error("%s", gerr->message);
-		g_clear_error(&gerr);
+	if (err) {
+		error("%s", err->message);
+		g_clear_error(&err);
 		goto drop;
 	}
 
@@ -533,7 +531,7 @@ static int headset_server_init(struct audio_adapter *adapter)
 			master = tmp;
 	}
 
-	io =  bt_io_listen(BT_IO_RFCOMM, ag_io_cb, NULL, adapter, NULL, &err,
+	io =  bt_io_listen(BT_IO_RFCOMM, NULL, ag_confirm, adapter, NULL, &err,
 				BT_IO_OPT_SOURCE_BDADDR, &adapter->src,
 				BT_IO_OPT_CHANNEL, chan,
 				BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
@@ -564,7 +562,7 @@ static int headset_server_init(struct audio_adapter *adapter)
 
 	chan = DEFAULT_HF_AG_CHANNEL;
 
-	io = bt_io_listen(BT_IO_RFCOMM, ag_io_cb, NULL, adapter, NULL, &err,
+	io = bt_io_listen(BT_IO_RFCOMM, NULL, ag_confirm, adapter, NULL, &err,
 				BT_IO_OPT_SOURCE_BDADDR, &adapter->src,
 				BT_IO_OPT_CHANNEL, chan,
 				BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,


** Changed in: bluez (Ubuntu)
       Status: Triaged => Fix Released

-- 
bluetoothd crashed with SIGSEGV in g_main_context_dispatch()
https://bugs.launchpad.net/bugs/280878
You received this bug notification because you are a member of
Bluetooth, which is subscribed to bluez in ubuntu.



More information about the Ubuntu-bluetooth mailing list