From d317144c04b6d52c354a7cdd11a62adf6de42b64 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Sat, 11 Aug 2007 12:18:22 +0000 Subject: Fix avdtp session reference counting --- audio/avdtp.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/audio/avdtp.c b/audio/avdtp.c index 8615a18a..cf6060e4 100644 --- a/audio/avdtp.c +++ b/audio/avdtp.c @@ -349,8 +349,6 @@ static gboolean disconnect_timeout(gpointer user_data) assert(session->ref == 1); - sessions = g_slist_remove(sessions, session); - session->dc_timer = 0; avdtp_unref(session); @@ -1612,7 +1610,7 @@ static struct avdtp *find_session(bdaddr_t *src, bdaddr_t *dst) return NULL; } -struct avdtp *avdtp_get(bdaddr_t *src, bdaddr_t *dst) +static struct avdtp *avdtp_get_internal(bdaddr_t *src, bdaddr_t *dst) { struct avdtp *session; @@ -1633,6 +1631,15 @@ struct avdtp *avdtp_get(bdaddr_t *src, bdaddr_t *dst) sessions = g_slist_append(sessions, session); + return session; +} + +struct avdtp *avdtp_get(bdaddr_t *src, bdaddr_t *dst) +{ + struct avdtp *session; + + session = avdtp_get_internal(src, dst); + return avdtp_ref(session); } @@ -2053,7 +2060,7 @@ static gboolean avdtp_server_cb(GIOChannel *chan, GIOCondition cond, void *data) return TRUE; } - session = avdtp_get(&src, &dst); + session = avdtp_get_internal(&src, &dst); if (session->pending_open && session->pending_open->open_acp) { handle_transport_connect(session, cli_sk, l2o.imtu); -- cgit