@@ -1397,7 +1397,7 @@ enum class State : uint8_t { Uninitialized, On, Off };
1397
1397
static std::atomic<State> CurrentState;
1398
1398
1399
1399
static LazyMutex ActiveContinuationsLock;
1400
- static Lazy<std::unordered_set<ContinuationAsyncContext *>> ActiveContinuations;
1400
+ static Lazy<std::unordered_set<AsyncTask *>> ActiveContinuations;
1401
1401
1402
1402
static bool isEnabled () {
1403
1403
auto state = CurrentState.load (std::memory_order_relaxed);
@@ -1410,39 +1410,39 @@ static bool isEnabled() {
1410
1410
return state == State::On;
1411
1411
}
1412
1412
1413
- static void init (ContinuationAsyncContext *context ) {
1413
+ static void init (AsyncTask *task ) {
1414
1414
if (!isEnabled ())
1415
1415
return ;
1416
1416
1417
1417
LazyMutex::ScopedLock guard (ActiveContinuationsLock);
1418
- auto result = ActiveContinuations.get ().insert (context );
1418
+ auto result = ActiveContinuations.get ().insert (task );
1419
1419
auto inserted = std::get<1 >(result);
1420
1420
if (!inserted)
1421
1421
swift_Concurrency_fatalError (
1422
1422
0 ,
1423
- " Initializing continuation context %p that was already initialized.\n " ,
1424
- context );
1423
+ " Initializing continuation for task %p that was already initialized.\n " ,
1424
+ task );
1425
1425
}
1426
1426
1427
- static void willResume (ContinuationAsyncContext *context ) {
1427
+ static void willResume (AsyncTask *task ) {
1428
1428
if (!isEnabled ())
1429
1429
return ;
1430
1430
1431
1431
LazyMutex::ScopedLock guard (ActiveContinuationsLock);
1432
- auto removed = ActiveContinuations.get ().erase (context );
1432
+ auto removed = ActiveContinuations.get ().erase (task );
1433
1433
if (!removed)
1434
- swift_Concurrency_fatalError (0 ,
1435
- " Resuming continuation context %p that was not awaited "
1436
- " (may have already been resumed).\n " ,
1437
- context);
1434
+ swift_Concurrency_fatalError (
1435
+ 0 ,
1436
+ " Resuming continuation for task %p that is not awaited "
1437
+ " (may have already been resumed).\n " ,
1438
+ task);
1438
1439
}
1439
1440
1440
1441
} // namespace continuationChecking
1441
1442
1442
1443
SWIFT_CC (swift)
1443
1444
static AsyncTask *swift_continuation_initImpl(ContinuationAsyncContext *context,
1444
1445
AsyncContinuationFlags flags) {
1445
- continuationChecking::init (context);
1446
1446
context->Flags = ContinuationAsyncContext::FlagsType ();
1447
1447
if (flags.canThrow ()) context->Flags .setCanThrow (true );
1448
1448
if (flags.isExecutorSwitchForced ())
@@ -1479,6 +1479,7 @@ static AsyncTask *swift_continuation_initImpl(ContinuationAsyncContext *context,
1479
1479
task->ResumeContext = context;
1480
1480
task->ResumeTask = context->ResumeParent ;
1481
1481
1482
+ continuationChecking::init (task);
1482
1483
concurrency::trace::task_continuation_init (task, context);
1483
1484
1484
1485
return task;
@@ -1593,8 +1594,6 @@ static void swift_continuation_awaitImpl(ContinuationAsyncContext *context) {
1593
1594
1594
1595
static void resumeTaskAfterContinuation (AsyncTask *task,
1595
1596
ContinuationAsyncContext *context) {
1596
- continuationChecking::willResume (context);
1597
-
1598
1597
auto &sync = context->AwaitSynchronization ;
1599
1598
1600
1599
auto status = sync.load (std::memory_order_acquire);
@@ -1644,13 +1643,15 @@ static void resumeTaskAfterContinuation(AsyncTask *task,
1644
1643
1645
1644
SWIFT_CC (swift)
1646
1645
static void swift_continuation_resumeImpl (AsyncTask *task) {
1646
+ continuationChecking::willResume (task);
1647
1647
auto context = static_cast <ContinuationAsyncContext*>(task->ResumeContext );
1648
1648
concurrency::trace::task_continuation_resume (context, false );
1649
1649
resumeTaskAfterContinuation (task, context);
1650
1650
}
1651
1651
1652
1652
SWIFT_CC (swift)
1653
1653
static void swift_continuation_throwingResumeImpl (AsyncTask *task) {
1654
+ continuationChecking::willResume (task);
1654
1655
auto context = static_cast <ContinuationAsyncContext*>(task->ResumeContext );
1655
1656
concurrency::trace::task_continuation_resume (context, false );
1656
1657
resumeTaskAfterContinuation (task, context);
@@ -1660,6 +1661,7 @@ static void swift_continuation_throwingResumeImpl(AsyncTask *task) {
1660
1661
SWIFT_CC (swift)
1661
1662
static void swift_continuation_throwingResumeWithErrorImpl (AsyncTask *task,
1662
1663
/* +1 */ SwiftError *error) {
1664
+ continuationChecking::willResume (task);
1663
1665
auto context = static_cast <ContinuationAsyncContext*>(task->ResumeContext );
1664
1666
concurrency::trace::task_continuation_resume (context, true );
1665
1667
context->ErrorResult = error;
0 commit comments