Skip to content

Commit c406b0b

Browse files
committed
fix todo
1 parent 82719ed commit c406b0b

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

Sources/AsyncHTTPClient/AsyncAwait/AsyncRequestBag+StateMachine.swift

+13-7
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ extension AsyncRequestBag {
9595

9696
enum FailAction {
9797
case none
98-
case failContinuation(UnsafeContinuation<HTTPClientResponse, Error>, Error, HTTPRequestScheduler?, HTTPRequestExecutor?)
98+
/// fail response before head received. scheduler and executor are exclusive here.
99+
case failResponseHead(UnsafeContinuation<HTTPClientResponse, Error>, Error, HTTPRequestScheduler?, HTTPRequestExecutor?)
99100
case failResponseStream(UnsafeContinuation<ByteBuffer?, Error>, Error, HTTPRequestExecutor)
100101
}
101102

@@ -106,15 +107,15 @@ extension AsyncRequestBag {
106107

107108
case .waiting(let continuation):
108109
self.state = .finished(error: error, nil)
109-
return .failContinuation(continuation, error, nil, nil)
110+
return .failResponseHead(continuation, error, nil, nil)
110111

111112
case .queued(let continuation, let scheduler):
112113
self.state = .finished(error: error, nil)
113-
return .failContinuation(continuation, error, scheduler, nil)
114+
return .failResponseHead(continuation, error, scheduler, nil)
114115

115116
case .executing(let context, _, .initialized):
116117
self.state = .finished(error: error, nil)
117-
return .failContinuation(context.continuation, error, nil, context.executor)
118+
return .failResponseHead(context.continuation, error, nil, context.executor)
118119

119120
case .executing(_, _, .waitingForStream(_, next: .error)),
120121
.executing(_, _, .buffering(_, _, next: .error)):
@@ -165,8 +166,13 @@ extension AsyncRequestBag {
165166
}
166167

167168
// MARK: - Request -
169+
170+
enum StartExecutionAction {
171+
case cancel(HTTPRequestExecutor)
172+
case none
173+
}
168174

169-
mutating func willExecuteRequest(_ executor: HTTPRequestExecutor) -> Bool {
175+
mutating func willExecuteRequest(_ executor: HTTPRequestExecutor) -> StartExecutionAction {
170176
switch self.state {
171177
case .waiting(let continuation), .queued(let continuation, _):
172178
let context = ExecutionContext(
@@ -175,9 +181,9 @@ extension AsyncRequestBag {
175181
continuation: continuation
176182
)
177183
self.state = .executing(context, .initialized, .initialized)
178-
return true
184+
return .none
179185
case .finished(error: .some, .none):
180-
return false
186+
return .cancel(executor)
181187
case .initialized,
182188
.executing,
183189
.finished(error: .none, _),

Sources/AsyncHTTPClient/AsyncAwait/AsyncRequestBag.swift

+8-7
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,7 @@ class AsyncRequestBag {
8585
case .none:
8686
break
8787

88-
case .failContinuation(let continuation, let error, let scheduler, let executor):
89-
// TODO: better name needed. This is actually fail response before head received
88+
case .failResponseHead(let continuation, let error, let scheduler, let executor):
9089
continuation.resume(throwing: error)
9190
scheduler?.cancelRequest(self) // NOTE: scheduler and executor are exclusive here
9291
executor?.cancelRequest(self)
@@ -100,13 +99,15 @@ class AsyncRequestBag {
10099
// MARK: Scheduled request
101100

102101
func willExecuteRequest(_ executor: HTTPRequestExecutor) {
103-
let cancelExecutor = self.stateLock.withLock {
104-
// TODO: willExecuteRequest should return an action enum. We dislike magic bools
105-
!self.state.willExecuteRequest(executor)
102+
let action = self.stateLock.withLock {
103+
self.state.willExecuteRequest(executor)
106104
}
107105

108-
if cancelExecutor {
109-
return executor.cancelRequest(self)
106+
switch action {
107+
case .cancel(let executor):
108+
executor.cancelRequest(self)
109+
case .none:
110+
break
110111
}
111112
}
112113

0 commit comments

Comments
 (0)