diff --git a/apps/app_queue.c b/apps/app_queue.c index 8f949635d6..39413f9a60 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -2359,10 +2359,17 @@ static void pending_members_remove(struct member *mem) */ static void update_status(struct call_queue *q, struct member *m, const int status) { - m->status = status; + if (m->status != status) { + m->status = status; - /* Whatever the status is clear the member from the pending members pool */ - pending_members_remove(m); + /* Remove the member from the pending members pool only when the status changes. + * This is not done unconditionally because we can occasionally see multiple + * device state notifications of not in use after a previous call has ended, + * including after we have initiated a new call. This is more likely to + * happen when there is latency in the connection to the member. + */ + pending_members_remove(m); + } queue_publish_member_blob(queue_member_status_type(), queue_member_blob_create(q, m)); }