From f3ebb007ac66682bbba7926eac0c12258a945490 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Mon, 22 Oct 2007 09:01:09 +0000 Subject: Fix avdtp session leak when receiving consequtive start & suspend requests --- audio/a2dp.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/audio/a2dp.c b/audio/a2dp.c index a91141d7..57192bd6 100644 --- a/audio/a2dp.c +++ b/audio/a2dp.c @@ -631,12 +631,13 @@ static gboolean start_ind(struct avdtp *session, struct avdtp_local_sep *sep, else debug("SBC Source: Start_Ind"); - a2dp_sep->session = avdtp_ref(session); - - if (!a2dp_sep->locked) + if (!a2dp_sep->locked) { + a2dp_sep->session = avdtp_ref(session); a2dp_sep->suspend_timer = g_timeout_add(SUSPEND_TIMEOUT, (GSourceFunc) suspend_timeout, a2dp_sep); + } + return TRUE; } @@ -685,6 +686,8 @@ static gboolean suspend_ind(struct avdtp *session, struct avdtp_local_sep *sep, if (a2dp_sep->suspend_timer) { g_source_remove(a2dp_sep->suspend_timer); a2dp_sep->suspend_timer = 0; + avdtp_unref(a2dp_sep->session); + a2dp_sep->session = NULL; } return TRUE; @@ -1184,6 +1187,8 @@ unsigned int a2dp_source_request_stream(struct avdtp *session, if (sep->suspend_timer) { g_source_remove(sep->suspend_timer); sep->suspend_timer = 0; + avdtp_unref(sep->session); + sep->session = NULL; } g_idle_add((GSourceFunc) finalize_stream_setup, setup); } -- cgit