diff --git a/android/a2dp.c b/android/a2dp.c
index 9087c62..581d094 100644
--- a/android/a2dp.c
+++ b/android/a2dp.c
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
{
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;