g_slist_foreach(server->sources, (GFunc) a2dp_unregister_sep, NULL);
g_slist_free(server->sources);
+ avdtp_exit(src);
+
if (server->source_record_id)
remove_record_from_server(server->source_record_id);
if (!sep)
return -EINVAL;
- if (sep->info.inuse)
- return -EBUSY;
-
server = sep->server;
server->seps = g_slist_remove(server->seps, sep);
if (sep->stream)
- avdtp_sep_set_state(sep->stream->session, sep,
- AVDTP_STATE_IDLE);
+ release_stream(sep->stream, sep->stream->session);
g_free(sep);
void avdtp_exit(const bdaddr_t *src)
{
struct avdtp_server *server;
+ GSList *l;
server = find_server(servers, src);
if (!server)
return;
+ for (l = sessions; l; l = l->next) {
+ struct avdtp *session = l->data;
+
+ if (session->server == server)
+ connection_lost(session, -ECONNABORTED);
+ }
+
servers = g_slist_remove(servers, server);
g_io_channel_shutdown(server->io, TRUE, NULL);