You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Thank you for the test-case!
The fix seems a bit questionable to me - enabling listeners on every exponential backoff iteration also looks like invariant violation, but the bug is there for sure.
I could have added an accept_enable() in redsocks.c:1032, right before the return, but my reasoning was that the accept_backoff_ev event being pending "means" that redsocks isn't listening at the moment—and the rest of the code treats it that way. For example conn_pressure_lowered calls accept_enable() only if this event is pending.
So, in this way, event_add(&accept_backoff_ev, &tvdelay) semantically is 'stop listening for tvdelay'. If the event handler can return without re-enabling the listeners this meaning is lost. I chose to call accept_enable() as soon as possible within the event handler to prevent another bug like this one from ever happening.
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
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.
This fixes issue #99.
There's a situation where the connection pressure is solved but redsocks doesn't resume listening to new connections.
redsocks_conn_maxis hit,conn_pressureruns.conn_pressureadds theaccept_backoff_evevent and disables all listeners.accept_backoff_evgets triggered andredsocks_accept_backoffgets called.conn_pressure_ongoing() == true, soconn_pressureruns.conn_pressuredrops it and returns.conn_pressure_ongoing() == false, butaccept_enableisn't called because the conditional was evaluated before runningconn_pressure.redsocks_accept_backoffreturns, soaccept_backoff_evis not pending anymore andaccept_enablewill never be called.