The queue implementation allows this behavior. Note that tasks that are blocked waiting on a queue receive will be unblocked in their priority order. So if three tasks are blocked with priorities 1, 1 and 2 respectively then the task with priority 2 will always be unblocked first even if it was the last task to call xQueueReceive().