File tree Expand file tree Collapse file tree 2 files changed +22
-15
lines changed Expand file tree Collapse file tree 2 files changed +22
-15
lines changed Original file line number Diff line number Diff line change 10
10
11
11
import TSCLibc
12
12
import Foundation
13
- import Dispatch
14
13
15
14
public enum FileSystemError : Swift . Error {
16
15
/// Access to the path is denied.
@@ -515,8 +514,6 @@ public class InMemoryFileSystem: FileSystem {
515
514
516
515
/// The root filesytem.
517
516
private var root : Node
518
- /// A dispatch queue for accessing the lock map in a thread safe manner.
519
- private let lockMapQueue = DispatchQueue ( label: " org.swift.swiftpm. \( InMemoryFileSystem . self) .lockQueue " )
520
517
/// A map that keeps weak references to all locked files.
521
518
private let lockMap = NSMapTable < NSString , ReadWriteLock > ( keyOptions: . copyIn, valueOptions: . weakMemory)
522
519
@@ -779,17 +776,19 @@ public class InMemoryFileSystem: FileSystem {
779
776
}
780
777
781
778
public func withLock< T> ( on path: AbsolutePath , type: LockType = . exclusive, _ body: ( ) throws -> T ) throws -> T {
782
- var fileLock : ReadWriteLock ?
783
-
784
- lockMapQueue . sync {
785
- if let lock = lockMap . object ( forKey : path . pathString as NSString ) {
786
- fileLock = lock
787
- } else {
788
- fileLock = ReadWriteLock ( )
789
- lockMap . setObject ( fileLock, forKey : path . pathString as NSString )
790
- }
779
+ let lock = Lock ( )
780
+ var fileLock : ReadWriteLock
781
+
782
+ lock. lock ( )
783
+ if let lock = lockMap . object ( forKey : path . pathString as NSString ) {
784
+ fileLock = lock
785
+ } else {
786
+ fileLock = ReadWriteLock ( )
787
+ lockMap . setObject ( fileLock , forKey : path . pathString as NSString )
791
788
}
792
- return try fileLock!. withLock ( type: type, body)
789
+ lock. unlock ( )
790
+
791
+ return try fileLock. withLock ( type: type, body)
793
792
}
794
793
}
795
794
Original file line number Diff line number Diff line change @@ -24,10 +24,18 @@ public struct Lock {
24
24
public init ( ) {
25
25
}
26
26
27
+ func lock( ) {
28
+ _lock. lock ( )
29
+ }
30
+
31
+ func unlock( ) {
32
+ _lock. unlock ( )
33
+ }
34
+
27
35
/// Execute the given block while holding the lock.
28
36
public func withLock< T> ( _ body: ( ) throws -> T ) rethrows -> T {
29
- _lock . lock ( )
30
- defer { _lock . unlock ( ) }
37
+ lock ( )
38
+ defer { unlock ( ) }
31
39
return try body ( )
32
40
}
33
41
}
You can’t perform that action at this time.
0 commit comments