diff options
-rw-r--r-- | apps/app_queue.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/apps/app_queue.c b/apps/app_queue.c index 3d22f9821..7fd1c6c7d 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -2337,10 +2337,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; - - /* Whatever the status is clear the member from the pending members pool */ - pending_members_remove(m); + if (m->status != status) { + m->status = status; + + /* 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)); } |