Skip to content

Commit 909779a

Browse files
authored
Workspace: use TaskGroup to fix concurrency warning (#7979)
1 parent a1d7b2c commit 909779a

File tree

1 file changed

+30
-30
lines changed

1 file changed

+30
-30
lines changed

Sources/Workspace/Workspace+Dependencies.swift

+30-30
Original file line numberDiff line numberDiff line change
@@ -364,40 +364,40 @@ extension Workspace {
364364
//
365365
// We just request the packages here, repository manager will
366366
// automatically manage the parallelism.
367-
let group = DispatchGroup()
368-
for resolvedPackage in resolvedPackagesStore.resolvedPackages.values {
369-
group.enter()
370-
let observabilityScope = observabilityScope.makeChildScope(
371-
description: "requesting package containers",
372-
metadata: resolvedPackage.packageRef.diagnosticsMetadata
373-
)
367+
await withThrowingTaskGroup(of: Void.self) { taskGroup in
368+
for resolvedPackage in resolvedPackagesStore.resolvedPackages.values {
369+
let observabilityScope = observabilityScope.makeChildScope(
370+
description: "requesting package containers",
371+
metadata: resolvedPackage.packageRef.diagnosticsMetadata
372+
)
374373

375-
let updateStrategy: ContainerUpdateStrategy = {
376-
if self.configuration.skipDependenciesUpdates {
377-
return .never
378-
} else {
379-
switch resolvedPackage.state {
380-
case .branch(_, let revision):
381-
return .ifNeeded(revision: revision)
382-
case .revision(let revision):
383-
return .ifNeeded(revision: revision)
384-
case .version(_, .some(let revision)):
385-
return .ifNeeded(revision: revision)
386-
case .version(_, .none):
387-
return .always
374+
let updateStrategy: ContainerUpdateStrategy = {
375+
if self.configuration.skipDependenciesUpdates {
376+
return .never
377+
} else {
378+
switch resolvedPackage.state {
379+
case .branch(_, let revision):
380+
return .ifNeeded(revision: revision)
381+
case .revision(let revision):
382+
return .ifNeeded(revision: revision)
383+
case .version(_, .some(let revision)):
384+
return .ifNeeded(revision: revision)
385+
case .version(_, .none):
386+
return .always
387+
}
388388
}
389-
}
390-
}()
389+
}()
391390

392-
self.packageContainerProvider.getContainer(
393-
for: resolvedPackage.packageRef,
394-
updateStrategy: updateStrategy,
395-
observabilityScope: observabilityScope,
396-
on: .sharedConcurrent,
397-
completion: { _ in group.leave() }
398-
)
391+
taskGroup.addTask {
392+
_ = try await self.packageContainerProvider.getContainer(
393+
for: resolvedPackage.packageRef,
394+
updateStrategy: updateStrategy,
395+
observabilityScope: observabilityScope,
396+
on: .sharedConcurrent
397+
)
398+
}
399+
}
399400
}
400-
group.wait()
401401

402402
// Compute resolved packages that we need to actually clone.
403403
//

0 commit comments

Comments
 (0)