There is no need to check if device has specific services,
it was checked in session_init_control.
---
profiles/audio/avrcp.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index b1552b1..a57756e 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -3394,8 +3394,7 @@ static void target_init(struct avrcp *session)
DBG("%p version 0x%04x", target, target->version);
service = btd_device_get_service(session->dev, AVRCP_REMOTE_UUID);
- if (service != NULL)
- btd_service_connecting_complete(service, 0);
+ btd_service_connecting_complete(service, 0);
player = g_slist_nth_data(server->players, 0);
if (player != NULL) {
@@ -3440,8 +3439,7 @@ static void controller_init(struct avrcp *session)
session->supported_events |= (1 << AVRCP_EVENT_VOLUME_CHANGED);
service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID);
- if (service != NULL)
- btd_service_connecting_complete(service, 0);
+ btd_service_connecting_complete(service, 0);
/* Only create player if category 1 is supported */
if (!(controller->features & AVRCP_FEATURE_CATEGORY_1))
--
2.1.0
Hi Marcin,
On Wed, Mar 11, 2015 at 11:34 AM, Marcin Kraglak
<[email protected]> wrote:
> There is no need to check if device has specific services,
> it was checked in session_init_control.
> ---
> profiles/audio/avrcp.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
> index b1552b1..a57756e 100644
> --- a/profiles/audio/avrcp.c
> +++ b/profiles/audio/avrcp.c
> @@ -3394,8 +3394,7 @@ static void target_init(struct avrcp *session)
> DBG("%p version 0x%04x", target, target->version);
>
> service = btd_device_get_service(session->dev, AVRCP_REMOTE_UUID);
> - if (service != NULL)
> - btd_service_connecting_complete(service, 0);
> + btd_service_connecting_complete(service, 0);
>
> player = g_slist_nth_data(server->players, 0);
> if (player != NULL) {
> @@ -3440,8 +3439,7 @@ static void controller_init(struct avrcp *session)
> session->supported_events |= (1 << AVRCP_EVENT_VOLUME_CHANGED);
>
> service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID);
> - if (service != NULL)
> - btd_service_connecting_complete(service, 0);
> + btd_service_connecting_complete(service, 0);
>
> /* Only create player if category 1 is supported */
> if (!(controller->features & AVRCP_FEATURE_CATEGORY_1))
> --
> 2.1.0
Applied, thanks.
--
Luiz Augusto von Dentz
If there is a call to avrcp_connect, state of service is changed to
BTD_SERVICE_STATE_CONNECTING. If connection failed, state didn't change
to BTD_SERVICE_STATE_DISCONNECTED because controller_destroy() and
target_destroy() was not called. Set state of services in session_destroy()
instead.
---
profiles/audio/avrcp.c | 33 +++++++++++++++++----------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
index a57756e..a67b81e 100644
--- a/profiles/audio/avrcp.c
+++ b/profiles/audio/avrcp.c
@@ -3486,19 +3486,11 @@ static void session_init_control(struct avrcp *session)
static void controller_destroy(struct avrcp *session)
{
struct avrcp_data *controller = session->controller;
- struct btd_service *service;
DBG("%p", controller);
g_slist_free_full(controller->players, player_destroy);
- service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID);
-
- if (session->control_id == 0)
- btd_service_connecting_complete(service, -EIO);
- else
- btd_service_disconnecting_complete(service, 0);
-
g_free(controller);
}
@@ -3506,31 +3498,40 @@ static void target_destroy(struct avrcp *session)
{
struct avrcp_data *target = session->target;
struct avrcp_player *player = target->player;
- struct btd_service *service;
DBG("%p", target);
if (player != NULL)
player->sessions = g_slist_remove(player->sessions, session);
- service = btd_device_get_service(session->dev, AVRCP_REMOTE_UUID);
-
- if (session->control_id == 0)
- btd_service_connecting_complete(service, -EIO);
- else
- btd_service_disconnecting_complete(service, 0);
-
g_free(target);
}
static void session_destroy(struct avrcp *session)
{
struct avrcp_server *server = session->server;
+ struct btd_service *service;
server->sessions = g_slist_remove(server->sessions, session);
session_abort_pending_pdu(session);
+ service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID);
+ if (service != NULL) {
+ if (session->control_id == 0)
+ btd_service_connecting_complete(service, -EIO);
+ else
+ btd_service_disconnecting_complete(service, 0);
+ }
+
+ service = btd_device_get_service(session->dev, AVRCP_REMOTE_UUID);
+ if (service != NULL) {
+ if (session->control_id == 0)
+ btd_service_connecting_complete(service, -EIO);
+ else
+ btd_service_disconnecting_complete(service, 0);
+ }
+
if (session->browsing_timer > 0)
g_source_remove(session->browsing_timer);
--
2.1.0