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 pull request solves issue #32 - "Graceful shutdown on SIGQUIT lasts forever if requests keep coming"
Current version 0.1025 releases listening ports in AE::cv callback on
$self->{exit_guard}
. This callback is never called when Twiggy is under heavy load (or delayed response) because every incoming request calls$self->{exit_guard}->begin
when starts (and$self->{exit_guard}->end
when finishes) and counter never drops to zero.When SIGQUIT is caught the counter must be decreased with
$self->{exit_guard}->end
and also the array with guards ($self->{listen_guards}
} must be released to finish listening on ports.Twiggy::Server::SS doesn't add guards to
$self->{listen_guards}
at all when tcp servers are created.This pull request:
$self->{listen_guards}
and ignore multiple SIGQUIT$self->{listen_guards}
)All tests passed (tested under CentOS and Mac OS X) and also Twiggy::Prefork tests are ok with modified Twiggy.
The test case from issue #32 is now working as expected, running request are finished and server dies.