Skip to content

Commit d6b0d16

Browse files
authored
fix race condition with TSCUtility.Platform::darwinCacheDirectories (#3151)
motivation: TSCUtility.Platform::darwinCacheDirectories is not thread-safe, can cause race condition when accessing concurrently changes: wrap TSCUtility.Platform::darwinCacheDirectories with ThreadSafeArrayStore
1 parent 4dfc759 commit d6b0d16

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

Sources/PackageLoading/ManifestLoader.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1051,7 +1051,7 @@ private func sandboxProfile(toolsVersion: ToolsVersion, cacheDirectories: [Absol
10511051
stream <<< "(allow sysctl*)" <<< "\n"
10521052
// Allow writing in temporary locations.
10531053
stream <<< "(allow file-write*" <<< "\n"
1054-
for directory in Platform.darwinCacheDirectories() {
1054+
for directory in Platform.threadSafeDarwinCacheDirectories.get() {
10551055
stream <<< ##" (regex #"^\##(directory.pathString)/org\.llvm\.clang.*")"## <<< "\n"
10561056
}
10571057
for directory in cacheDirectories {
@@ -1063,6 +1063,10 @@ private func sandboxProfile(toolsVersion: ToolsVersion, cacheDirectories: [Absol
10631063
return stream.bytes.description
10641064
}
10651065

1066+
extension TSCUtility.Platform {
1067+
internal static let threadSafeDarwinCacheDirectories = ThreadSafeArrayStore<AbsolutePath>(Self.darwinCacheDirectories())
1068+
}
1069+
10661070
extension TSCBasic.Diagnostic.Message {
10671071
static func duplicateTargetName(targetName: String) -> Self {
10681072
.error("duplicate target named '\(targetName)'")

0 commit comments

Comments
 (0)