Diff between e3d07f58d15072c60703ab5bbe2e3b33513a000c and 82c1095423b0b871b5fdd62c510b21d85b0cb240

Changed Files

File Additions Deletions Status
android/a2dp.c +5 -1 modified
android/avdtp.c +8 -1 modified

Full Patch

diff --git a/android/a2dp.c b/android/a2dp.c
index 9087c62..581d094 100644
--- a/android/a2dp.c
+++ b/android/a2dp.c
@@ -150,11 +150,15 @@ static void signaling_connect_cb(GIOChannel *chan, GError *err,
 		return;
 	}
 
-	g_io_channel_set_close_on_unref(chan, FALSE);
 	fd = g_io_channel_unix_get_fd(chan);
 
 	/* FIXME: Add proper version */
 	dev->session = avdtp_new(fd, imtu, omtu, 0x0100);
+	if (!dev->session) {
+		bt_a2dp_notify_state(dev, HAL_A2DP_STATE_DISCONNECTED);
+		return;
+	}
+
 	avdtp_add_disconnect_cb(dev->session, disconnect_cb, dev);
 
 	if (dev->io) {
diff --git a/android/avdtp.c b/android/avdtp.c
index 7d3cb18..2a5ea9b 100644
--- a/android/avdtp.c
+++ b/android/avdtp.c
@@ -2045,9 +2045,16 @@ struct avdtp *avdtp_new(int fd, size_t imtu, size_t omtu, uint16_t version)
 {
 	struct avdtp *session;
 	GIOCondition cond = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL;
+	int new_fd;
+
+	new_fd = dup(fd);
+	if (new_fd < 0) {
+		error("dup(): %s (%d)", strerror(errno), errno);
+		return NULL;
+	}
 
 	session = g_new0(struct avdtp, 1);
-	session->io = g_io_channel_unix_new(fd);
+	session->io = g_io_channel_unix_new(new_fd);
 	session->version = version;
 	session->imtu = imtu;
 	session->omtu = omtu;