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