Skip to content

Commit 6098fb1

Browse files
fix compilation of NativeProtocol seekInputStream func
1 parent 224d6b0 commit 6098fb1

File tree

2 files changed

+39
-21
lines changed

2 files changed

+39
-21
lines changed

Foundation/URLSession/NativeProtocol.swift

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -262,27 +262,38 @@ internal class _NativeProtocol: URLProtocol, _EasyHandleDelegate {
262262
func seekInputStream(to position: UInt64) throws {
263263
// We will reset the body source and seek forward.
264264
guard let session = task?.session as? URLSession else { fatalError() }
265+
266+
var currentInputStream: InputStream?
267+
265268
if let delegate = session.delegate as? URLSessionTaskDelegate {
266-
delegate.urlSession(session, task: task!, needNewBodyStream: { [weak self] inputStream in
267-
if let strongSelf = self, let url = strongSelf.request.url, let inputStream = inputStream {
268-
switch strongSelf.internalState {
269-
case .transferInProgress(let currentTransferState):
270-
switch currentTransferState.requestBodySource {
271-
case is _BodyStreamSource:
272-
try inputStream.seek(to: position)
273-
let drain = strongSelf.createTransferBodyDataDrain()
274-
let source = _BodyStreamSource(inputStream: inputStream)
275-
let transferState = _TransferState(url: url, bodyDataDrain: drain, bodySource: source)
276-
strongSelf.internalState = .transferInProgress(transferState)
277-
default:
278-
NSUnimplemented()
279-
}
280-
default:
281-
//TODO: it's possible?
282-
break
283-
}
284-
}
269+
let dispatchGroup = DispatchGroup()
270+
dispatchGroup.enter()
271+
272+
delegate.urlSession(session, task: task!, needNewBodyStream: { inputStream in
273+
currentInputStream = inputStream
274+
dispatchGroup.leave()
285275
})
276+
277+
_ = dispatchGroup.wait(timeout: .now() + 7)
278+
}
279+
280+
if let url = self.request.url, let inputStream = currentInputStream {
281+
switch self.internalState {
282+
case .transferInProgress(let currentTransferState):
283+
switch currentTransferState.requestBodySource {
284+
case is _BodyStreamSource:
285+
try inputStream.seek(to: position)
286+
let drain = self.createTransferBodyDataDrain()
287+
let source = _BodyStreamSource(inputStream: inputStream)
288+
let transferState = _TransferState(url: url, bodyDataDrain: drain, bodySource: source)
289+
self.internalState = .transferInProgress(transferState)
290+
default:
291+
NSUnimplemented()
292+
}
293+
default:
294+
//TODO: it's possible?
295+
break
296+
}
286297
}
287298
}
288299

TestFoundation/TestStream.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@
66
// See http://swift.org/LICENSE.txt for license information
77
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
88
//
9+
#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT
10+
#if (os(Linux) || os(Android))
11+
@testable import Foundation
12+
#else
13+
@testable import SwiftFoundation
14+
#endif
15+
#endif
916

1017
private extension Data {
1118
init(reading input: InputStream) {
@@ -18,7 +25,7 @@ private extension Data {
1825
let read = input.read(buffer, maxLength: bufferSize)
1926
self.append(buffer, count: read)
2027
}
21-
buffer.deallocate(capacity: bufferSize)
28+
buffer.deallocate()
2229

2330
input.close()
2431
}
@@ -150,7 +157,7 @@ class TestStream : XCTestCase {
150157
try stream.seek(to: pos)
151158
let streamData = Data(reading: stream)
152159

153-
let subdata = data.subdata(in: Range(Int(pos)..<data.count))
160+
let subdata = data[Int(pos)..<data.count]
154161
XCTAssertEqual(streamData, subdata)
155162

156163
return subdata

0 commit comments

Comments
 (0)