From 100a4e096c04ea0893ddd14ba60c73313db8fccb Mon Sep 17 00:00:00 2001 From: Dan Blackwell Date: Tue, 10 Jun 2025 19:35:46 +0100 Subject: [PATCH] [concurrency] Move tsan_release to point before task gets destroyed rdar://152501929 --- stdlib/public/Concurrency/Actor.cpp | 2 -- stdlib/public/Concurrency/TaskPrivate.h | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/public/Concurrency/Actor.cpp b/stdlib/public/Concurrency/Actor.cpp index aad95245c2423..97376daa3839c 100644 --- a/stdlib/public/Concurrency/Actor.cpp +++ b/stdlib/public/Concurrency/Actor.cpp @@ -256,8 +256,6 @@ void swift::runJobInEstablishedExecutorContext(Job *job) { #if SWIFT_OBJC_INTEROP objc_autoreleasePoolPop(pool); #endif - - _swift_tsan_release(job); } void swift::adoptTaskVoucher(AsyncTask *task) { diff --git a/stdlib/public/Concurrency/TaskPrivate.h b/stdlib/public/Concurrency/TaskPrivate.h index f61cd3ac09bbe..ea6db1ae0649e 100644 --- a/stdlib/public/Concurrency/TaskPrivate.h +++ b/stdlib/public/Concurrency/TaskPrivate.h @@ -854,6 +854,8 @@ struct AsyncTask::PrivateStorage { } } + _swift_tsan_release(task); + // Destroy and deallocate any remaining task local items since the task is // completed. We need to do this before we destroy the task local // deallocator.