diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2007-08-11 12:18:22 +0000 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2007-08-11 12:18:22 +0000 |
commit | d317144c04b6d52c354a7cdd11a62adf6de42b64 (patch) | |
tree | 94f9d8677658fb1123d4c732e587b9cfaf7968a1 /audio/avdtp.c | |
parent | 6763ebb3c231740c66a235f94d56e8d8cc213d90 (diff) |
Fix avdtp session reference counting
Diffstat (limited to 'audio/avdtp.c')
-rw-r--r-- | audio/avdtp.c | 15 |
1 files 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); |