diff --git a/stdlib/public/Concurrency/TaskStatus.cpp b/stdlib/public/Concurrency/TaskStatus.cpp index abf34228af2f4..784bb22708b85 100644 --- a/stdlib/public/Concurrency/TaskStatus.cpp +++ b/stdlib/public/Concurrency/TaskStatus.cpp @@ -1139,6 +1139,9 @@ static swift_task_escalateImpl(AsyncTask *task, JobPriority newPriority) { auto newStatus = oldStatus; while (true) { + // Ensure oldPriority is up to date if we retry the compare_exchange. + oldPriority = oldStatus.getStoredPriority(); + // Fast path: check that the stored priority is already at least // as high as the desired priority. if (oldPriority >= newPriority) {