Skip to content

Ensure request body iteration is cancelled when request is cancelled - #936

Closed
hamzahrmalik wants to merge 1 commit into
swift-server:mainfrom
hamzahrmalik:prevent_body_race
Closed

hamzahrmalik wants to merge 1 commit into
swift-server:mainfrom
hamzahrmalik:prevent_body_race

Conversation

@hamzahrmalik

Copy link
Copy Markdown
Contributor

Problem

Currently, if users pass an async sequence as the request body, AHC will iterate that sequence in an unstructured task. If the request is cancelled or times out, execute(...) returns, but the body is still being iterated by the unstructured task. This breaks structured concurrency. Specifically, this can result in concurrent access if the caller then retries the request or otherwise uses the async sequence again.

Change

Store the unstructured task, and cancel and await is when the request is failed.

Note: This means execute might now take longer than the specified timeout, if the sequence does not cancel quickly

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant