Fix Crypto API stuck on long streams #1425
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
The "Receive" was not called as the "Send" got stuck after about ~400kb of data was sent, it seems like a buffer was full, but since "Receive" wasn't called, the buffers weren't draining.
Once the "Send" task is not awaited, "Receive" is called and starts pulling data.
As long as "Send" is somehow being chained together with "Receive" (using
Task.WhenAll
, or.ContinueWith
, etc), the "Receive" task is not starting.The only way I was able to complete both was to disconnect them.
Ran 1000 iterations of
EncryptAsync
+DecryptAsync
:Using 6Mb file, total data processed ~12Gb (Encrypt 6Gb + Decrypt 6Gb)
No increase in memory was observed for
daprd
and tester app.All went successful, the "Send" task was completed and cleaned.
Nevertheless, knowing that this is not a good practice when working with Tasks, would like to receive an opinion on this change or maybe an idea why this might happen with tasks.
Issue reference
We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.
Please reference the issue this PR will close: #[issue number]
Checklist
Please make sure you've completed the relevant tasks for this PR, out of the following list: