Skip to content

Commit 35a309e

Browse files
committed
Thread safety
1 parent a8018e7 commit 35a309e

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

Foundation/URLSession/URLSession.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ public let NSURLSessionTransferSizeUnknown: Int64 = -1
192192
open class URLSession : NSObject {
193193
fileprivate let _configuration: _Configuration
194194
fileprivate let multiHandle: _MultiHandle
195+
fileprivate let taskIdentifierLock = NSLock()
195196
fileprivate var nextTaskIdentifier = 1
196197
internal let workQueue: DispatchQueue
197198
/// This queue is used to make public attributes on `URLSessionTask` instances thread safe.
@@ -406,9 +407,11 @@ extension URLSession._Request {
406407

407408
fileprivate extension URLSession {
408409
func createNextTaskIdentifier() -> Int {
409-
let i = nextTaskIdentifier
410-
nextTaskIdentifier += 1
411-
return i
410+
return taskIdentifierLock.synchronized {
411+
let i = nextTaskIdentifier
412+
nextTaskIdentifier += 1
413+
return i
414+
}
412415
}
413416
}
414417

0 commit comments

Comments
 (0)