This repository was archived by the owner on Jan 24, 2026. It is now read-only.
Fixed unhandled SemaphoreFullException when messages arrive while ReceiveAsync is still executing#74
Open
gribunin wants to merge 4 commits into
Open
Fixed unhandled SemaphoreFullException when messages arrive while ReceiveAsync is still executing#74gribunin wants to merge 4 commits into
gribunin wants to merge 4 commits into
Conversation
…n be safely Set multiple times in a row, while semaphore can be Release'ed beyond its maximum level. When server sends messages faster than the client reads, and OnChannelMessageReceived was called while ReceiveAsync is still executing, the _readSemaphore was Release'ed twice -- first in on OnChannelMessageReceived, then second time at the end of ReceiveAsync (because readItems.Count > 0) which lead to unhandled SemaphoreFullException in ReceiveAsync
…ter was not used). More solid pattern handling of CancellationToken in ReceiveAsync
…er than 65535 bytes
|
Any news about this pull request? I had experienced the same problem while testing my webserver with jMeter. I made a quick and dirty fix removing this line |
|
Hello, |
Owner
|
I'm working on a new network stack. Completely async and rewritten from scratch. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
_readSemaphore has been replaced with _readEvent, because an event can be safely Set multiple times in a row, while semaphore can be unintentionally Release'ed beyond its maximum level. When server sends messages faster than the client reads, and OnChannelMessageReceived is called while ReceiveAsync is still executing, the _readSemaphore is Release'ed twice -- first in on OnChannelMessageReceived, then second time at the end of ReceiveAsync (because readItems.Count > 0) which lead to unhandled SemaphoreFullException in ReceiveAsync
The offending data flow: