summaryrefslogtreecommitdiffstats
path: root/audio/avdtp.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/avdtp.c')
-rw-r--r--audio/avdtp.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/audio/avdtp.c b/audio/avdtp.c
index d1cb5ef3..a45b7d28 100644
--- a/audio/avdtp.c
+++ b/audio/avdtp.c
@@ -391,6 +391,9 @@ struct avdtp {
guint dc_timer;
+ /* Attempt stream setup instead of disconnecting */
+ gboolean stream_setup;
+
DBusPendingCall *pending_auth;
};
@@ -597,12 +600,21 @@ static gboolean stream_open_timeout(gpointer user_data)
static gboolean disconnect_timeout(gpointer user_data)
{
struct avdtp *session = user_data;
+ struct audio_device *dev;
+ gboolean stream_setup;
assert(session->ref == 1);
session->dc_timer = 0;
+ stream_setup = session->stream_setup;
+ session->stream_setup = FALSE;
- connection_lost(session, -ETIMEDOUT);
+ dev = manager_get_device(&session->server->src, &session->dst);
+
+ if (dev && dev->sink && stream_setup)
+ sink_setup_stream(dev->sink, session);
+ else
+ connection_lost(session, -ETIMEDOUT);
return FALSE;
}
@@ -611,6 +623,7 @@ static void remove_disconnect_timer(struct avdtp *session)
{
g_source_remove(session->dc_timer);
session->dc_timer = 0;
+ session->stream_setup = FALSE;
}
static void set_disconnect_timer(struct avdtp *session)
@@ -2963,6 +2976,7 @@ static void auth_cb(DBusError *derr, void *user_data)
/* Here we set the disconnect timer so we don't stay in IDLE state
* indefinitely but set auto_dc to FALSE so that when a stream is
* finally opened it doesn't get closed due to a timeout */
+ session->stream_setup = TRUE;
set_disconnect_timer(session);
avdtp_set_auto_disconnect(session, FALSE);