This fixes a segmentation fault caused by controls trying to notify an unregistered player. When an unregistered player is replaced by another valid player from the list, the session is not referenced in the sessions list of the player and when this player is unregistered, its reference is not removed from the session. --- profiles/audio/avrcp.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c index ed436de3b..70f52efe8 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c @@ -4441,8 +4441,19 @@ void avrcp_unregister_player(struct avrcp_player *player) if (target == NULL) continue; - if (target->player == player) - target->player = g_slist_nth_data(server->players, 0); + if (target->player == player) { + struct avrcp_player *next_player = g_slist_nth_data( + server->players, + 0); + + target->player = next_player; + + if (next_player) { + next_player->sessions = g_slist_append( + next_player->sessions, + session); + } + } } avrcp_player_event(player, -- 2.28.0