@@ -1150,38 +1150,42 @@ void ASTBuildOperation::schedule(WorkQueue Queue) {
1150
1150
std::string Error;
1151
1151
assert (!Result && " We should only be producing a result once" );
1152
1152
ASTUnitRef AST = buildASTUnit (Error);
1153
+ SmallVector<SwiftASTConsumerRef, 4 > LocalConsumers;
1153
1154
{
1154
1155
llvm::sys::ScopedLock L (ConsumersAndResultMtx);
1155
1156
bool WasCancelled = CancellationFlag->load (std::memory_order_relaxed);
1156
1157
Result.emplace (AST, Error, WasCancelled);
1157
- for (auto &Consumer : Consumers) {
1158
- informConsumer (Consumer);
1159
- }
1158
+ LocalConsumers = Consumers;
1160
1159
Consumers = {};
1161
1160
}
1161
+ for (auto &Consumer : LocalConsumers) {
1162
+ informConsumer (Consumer);
1163
+ }
1162
1164
DidFinishCallback ();
1163
1165
},
1164
1166
/* isStackDeep=*/ true );
1165
1167
}
1166
1168
1167
1169
bool ASTBuildOperation::addConsumer (SwiftASTConsumerRef Consumer) {
1168
- llvm::sys::ScopedLock L (ConsumersAndResultMtx);
1169
- if (isCancelled ()) {
1170
- return false ;
1171
- }
1172
- if (Result) {
1173
- informConsumer (Consumer);
1174
- } else {
1170
+ {
1171
+ llvm::sys::ScopedLock L (ConsumersAndResultMtx);
1172
+ if (isCancelled ()) {
1173
+ return false ;
1174
+ }
1175
+ if (Result) {
1176
+ informConsumer (Consumer);
1177
+ return true ;
1178
+ }
1175
1179
assert (OperationState != State::Finished);
1176
- auto WeakThis = std::weak_ptr<ASTBuildOperation>(shared_from_this ());
1177
1180
Consumers.push_back (Consumer);
1178
- Consumer->setCancellationRequestCallback (
1179
- [WeakThis](SwiftASTConsumerRef Consumer) {
1180
- if (auto This = WeakThis.lock ()) {
1181
- This->requestConsumerCancellation (Consumer);
1182
- }
1183
- });
1184
1181
}
1182
+ auto WeakThis = std::weak_ptr<ASTBuildOperation>(shared_from_this ());
1183
+ Consumer->setCancellationRequestCallback (
1184
+ [WeakThis](SwiftASTConsumerRef Consumer) {
1185
+ if (auto This = WeakThis.lock ()) {
1186
+ This->requestConsumerCancellation (Consumer);
1187
+ }
1188
+ });
1185
1189
return true ;
1186
1190
}
1187
1191
0 commit comments