-
Notifications
You must be signed in to change notification settings - Fork 125
cancel should be done with outbound user event #110
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@@ -476,7 +476,7 @@ extension HTTPClient { | |||
self.lock.withLock { | |||
if !cancelled { | |||
cancelled = true | |||
channel?.pipeline.fireUserInboundEventTriggered(TaskCancelEvent()) | |||
channel?.triggerUserOutboundEvent(TaskCancelEvent(), promise: nil) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think since cancellation is not guaranteed to do anything (it's best effort only), we can skip any errors, wdyt?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@artemredkin firing through the ChannelPipeline
should come out of the lock. So something like
let channel = self.lock.withLock {
if !self.cancelled {
self.cancelled = true
return self.channel
}
}
channel?.triggerUserOutboundEvent(...)
Regarding ignoring the promise: I'm okay with that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed, thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sorry, missed the more important bit first :)
} | ||
channel?.triggerUserOutboundEvent(TaskCancelEvent(), promise: nil) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@artemredkin I'm pretty sure this doesn't actually work (which proves there's no test) because whatever ChannelHandler is supposed to catch this event needs to change from inbound to outbound user event.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we need to add a test that verifies cancellation works.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we definitely have the test, it just never finishes :D
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed! and tests pass now
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome, thank you!
fixes #97