summaryrefslogtreecommitdiffstats
path: root/audio/avdtp.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2007-08-11 12:18:22 +0000
committerJohan Hedberg <johan.hedberg@nokia.com>2007-08-11 12:18:22 +0000
commitd317144c04b6d52c354a7cdd11a62adf6de42b64 (patch)
tree94f9d8677658fb1123d4c732e587b9cfaf7968a1 /audio/avdtp.c
parent6763ebb3c231740c66a235f94d56e8d8cc213d90 (diff)
Fix avdtp session reference counting
Diffstat (limited to 'audio/avdtp.c')
-rw-r--r--audio/avdtp.c15
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);