@@ -1779,14 +1779,14 @@ reevaluate_if_taskgroup_has_results:;
1779
1779
// ==== 3) Add to wait queue -------------------------------------------------
1780
1780
assert (assumed.readyTasks (this ) == 0 );
1781
1781
_swift_tsan_release (static_cast <Job *>(waitingTask));
1782
+ if (!hasSuspended) {
1783
+ waitingTask->flagAsSuspendedOnTaskGroup (asAbstract (this ));
1784
+ hasSuspended = true ;
1785
+ }
1782
1786
while (true ) {
1783
- if (!hasSuspended) {
1784
- hasSuspended = true ;
1785
- waitingTask->flagAsSuspendedOnTaskGroup (asAbstract (this ));
1786
- }
1787
1787
// Put the waiting task at the beginning of the wait queue.
1788
1788
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 (
1790
1790
waitHead, waitingTask,
1791
1791
/* success*/ std::memory_order_release,
1792
1792
/* failure*/ std::memory_order_acquire)) {
@@ -1941,13 +1941,13 @@ void TaskGroupBase::waitAll(SwiftError* bodyError, AsyncTask *waitingTask,
1941
1941
1942
1942
auto waitHead = waitQueue.load (std::memory_order_acquire);
1943
1943
_swift_tsan_release (static_cast <Job *>(waitingTask));
1944
+ if (!hasSuspended) {
1945
+ waitingTask->flagAsSuspendedOnTaskGroup (asAbstract (this ));
1946
+ hasSuspended = true ;
1947
+ }
1944
1948
while (true ) {
1945
- if (!hasSuspended) {
1946
- hasSuspended = true ;
1947
- waitingTask->flagAsSuspendedOnTaskGroup (asAbstract (this ));
1948
- }
1949
1949
// Put the waiting task at the beginning of the wait queue.
1950
- if (waitQueue.compare_exchange_strong (
1950
+ if (waitQueue.compare_exchange_weak (
1951
1951
waitHead, waitingTask,
1952
1952
/* success*/ std::memory_order_release,
1953
1953
/* failure*/ std::memory_order_acquire)) {
0 commit comments