diff --git a/android/a2dp.c b/android/a2dp.c
index 2de2f66..9087c62 100644
--- a/android/a2dp.c
+++ b/android/a2dp.c
if (dev->session)
avdtp_unref(dev->session);
- if (dev->io)
+ if (dev->io) {
+ g_io_channel_shutdown(dev->io, FALSE, NULL);
g_io_channel_unref(dev->io);
+ }
devices = g_slist_remove(devices, dev);
g_free(dev);
return;
}
- /* FIXME: Add proper version */
+ 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);
avdtp_add_disconnect_cb(dev->session, disconnect_cb, dev);
+ if (dev->io) {
+ g_io_channel_unref(dev->io);
+ dev->io = NULL;
+ }
+
bt_a2dp_notify_state(dev, HAL_A2DP_STATE_CONNECTED);
}
}
dev = l->data;
+ status = HAL_STATUS_SUCCESS;
- /* Wait signaling channel to HUP */
- if (dev->io)
- g_io_channel_shutdown(dev->io, TRUE, NULL);
+ if (dev->io) {
+ bt_a2dp_notify_state(dev, HAL_A2DP_STATE_DISCONNECTED);
+ goto failed;
+ }
+ /* Wait AVDTP session to shutdown */
+ avdtp_shutdown(dev->session);
bt_a2dp_notify_state(dev, HAL_A2DP_STATE_DISCONNECTING);
- status = HAL_STATUS_SUCCESS;
-
failed:
ipc_send_rsp(HAL_SERVICE_ID_A2DP, HAL_OP_A2DP_DISCONNECT, status);
}