summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--audio/avdtp.c12
-rw-r--r--audio/manager.c3
2 files changed, 13 insertions, 2 deletions
diff --git a/audio/avdtp.c b/audio/avdtp.c
index 649e69a4..0b56340f 100644
--- a/audio/avdtp.c
+++ b/audio/avdtp.c
@@ -2088,7 +2088,17 @@ struct avdtp *avdtp_get(bdaddr_t *src, bdaddr_t *dst)
gboolean avdtp_is_connected(bdaddr_t *src, bdaddr_t *dst)
{
- return find_session(src, dst) == NULL ? FALSE : TRUE;
+ struct avdtp *session;
+
+ session = find_session(src, dst);
+
+ if (!session)
+ return FALSE;
+
+ if (session->state != AVDTP_SESSION_STATE_DISCONNECTED)
+ return TRUE;
+
+ return FALSE;
}
gboolean avdtp_stream_get_transport(struct avdtp_stream *stream, int *sock,
diff --git a/audio/manager.c b/audio/manager.c
index 4d8d424d..c1a72b8f 100644
--- a/audio/manager.c
+++ b/audio/manager.c
@@ -1681,7 +1681,8 @@ struct device *manager_get_connected_device(void)
for (l = devices; l != NULL; l = g_slist_next(l)) {
struct device *device = l->data;
- if (device->sink && sink_is_active(device))
+ if ((device->sink || device->source) &&
+ avdtp_is_connected(&device->src, &device->dst))
return device;
if (device->headset && headset_is_active(device))