@@ -1779,14 +1779,14 @@ reevaluate_if_taskgroup_has_results:;
17791779 // ==== 3) Add to wait queue -------------------------------------------------
17801780 assert (assumed.readyTasks (this ) == 0 );
17811781 _swift_tsan_release (static_cast <Job *>(waitingTask));
1782+ if (!hasSuspended) {
1783+ waitingTask->flagAsSuspendedOnTaskGroup (asAbstract (this ));
1784+ hasSuspended = true ;
1785+ }
17821786 while (true ) {
1783- if (!hasSuspended) {
1784- hasSuspended = true ;
1785- waitingTask->flagAsSuspendedOnTaskGroup (asAbstract (this ));
1786- }
17871787 // Put the waiting task at the beginning of the wait queue.
17881788 SWIFT_TASK_GROUP_DEBUG_LOG (this , " WATCH OUT, SET WAITER ONTO waitQueue.head = %p" , waitQueue.load (std::memory_order_relaxed));
1789- if (waitQueue.compare_exchange_strong (
1789+ if (waitQueue.compare_exchange_weak (
17901790 waitHead, waitingTask,
17911791 /* success*/ std::memory_order_release,
17921792 /* failure*/ std::memory_order_acquire)) {
@@ -1941,13 +1941,13 @@ void TaskGroupBase::waitAll(SwiftError* bodyError, AsyncTask *waitingTask,
19411941
19421942 auto waitHead = waitQueue.load (std::memory_order_acquire);
19431943 _swift_tsan_release (static_cast <Job *>(waitingTask));
1944+ if (!hasSuspended) {
1945+ waitingTask->flagAsSuspendedOnTaskGroup (asAbstract (this ));
1946+ hasSuspended = true ;
1947+ }
19441948 while (true ) {
1945- if (!hasSuspended) {
1946- hasSuspended = true ;
1947- waitingTask->flagAsSuspendedOnTaskGroup (asAbstract (this ));
1948- }
19491949 // Put the waiting task at the beginning of the wait queue.
1950- if (waitQueue.compare_exchange_strong (
1950+ if (waitQueue.compare_exchange_weak (
19511951 waitHead, waitingTask,
19521952 /* success*/ std::memory_order_release,
19531953 /* failure*/ std::memory_order_acquire)) {
0 commit comments