diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c
index 4f663d4..4f51b0d 100644
--- a/profiles/audio/avdtp.c
+++ b/profiles/audio/avdtp.c
{
char address[18];
+ session = avdtp_ref(session);
+
ba2str(device_get_address(session->device), address);
DBG("Disconnected from %s", address);
avdtp_set_state(session, AVDTP_SESSION_STATE_DISCONNECTED);
- if (session->ref > 0)
- return;
-
- avdtp_free(session);
+ avdtp_unref(session);
}
static gboolean disconnect_timeout(gpointer user_data)
if (session->ref > 0)
return;
- if (session->state == AVDTP_SESSION_STATE_CONNECTED) {
+ switch(session->state) {
+ case AVDTP_SESSION_STATE_CONNECTED:
set_disconnect_timer(session);
- return;
+ break;
+ case AVDTP_SESSION_STATE_CONNECTING:
+ connection_lost(session, ECONNABORTED);
+ break;
+ case AVDTP_SESSION_STATE_DISCONNECTED:
+ default:
+ avdtp_free(session);
+ break;
}
-
- connection_lost(session, ECONNABORTED);
}
struct avdtp *avdtp_ref(struct avdtp *session)