Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor listener closing code #2112

Merged
merged 4 commits into from Mar 3, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions History.md
Expand Up @@ -13,6 +13,7 @@

* Bugfixes
* Windows update extconf.rb for use with ssp and varied Ruby/MSYS2 combinations (#2069)
* Ensure control server Unix socket is closed on shutdown (#2112)
* Preserve `BUNDLE_GEMFILE` env var when using `prune_bundler` (#1893)
* Send 408 request timeout even when queue requests is disabled (#2119)
* Rescue IO::WaitReadable instead of EAGAIN for blocking read (#2121)
Expand Down
4 changes: 0 additions & 4 deletions lib/puma/binder.rb
Expand Up @@ -370,10 +370,6 @@ def close_listeners
end
end

def close_unix_paths
@unix_paths.each { |up| File.unlink(up) if File.exist? up }
end

def redirects_for_restart
redirects = {:close_others => true}
@listeners.each_with_index do |(l, io), i|
Expand Down
3 changes: 2 additions & 1 deletion lib/puma/launcher.rb
Expand Up @@ -184,7 +184,7 @@ def run
when :exit
# nothing
end
@binder.close_unix_paths
close_binder_listeners unless @status == :restart
end

# Return all tcp ports the launcher may be using, TCP or SSL
Expand All @@ -202,6 +202,7 @@ def restart_args
end

def close_binder_listeners
@runner.close_control_listeners
@binder.close_listeners
end

Expand Down
4 changes: 4 additions & 0 deletions lib/puma/runner.rb
Expand Up @@ -68,6 +68,10 @@ def start_control
@control = control
end

def close_control_listeners
@control.binder.close_listeners if @control
end

def ruby_engine
if !defined?(RUBY_ENGINE) || RUBY_ENGINE == "ruby"
"ruby #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
Expand Down
4 changes: 2 additions & 2 deletions test/test_binder.rb
Expand Up @@ -90,7 +90,7 @@ def test_pre_existing_unix

refute_includes @binder.instance_variable_get(:@unix_paths), unix_path

@binder.close_unix_paths
@binder.close_listeners

assert File.exist?(unix_path)

Expand Down Expand Up @@ -150,7 +150,7 @@ def assert_parsing_logs_uri(order = [:unix, :tcp])
assert stdout.include?(prepared_paths[order[0]]), "\n#{stdout}\n"
assert stdout.include?(prepared_paths[order[1]]), "\n#{stdout}\n"
ensure
@binder.close_unix_paths if order.include?(:unix) && UNIX_SKT_EXIST
@binder.close_listeners if order.include?(:unix) && UNIX_SKT_EXIST
end
end

Expand Down
12 changes: 11 additions & 1 deletion test/test_integration_pumactl.rb
Expand Up @@ -14,6 +14,8 @@ def setup
def teardown
super

refute File.exist?(@control_path), "Control path must be removed after stop"
ensure
[@state_path, @control_path].each { |p| File.unlink(p) rescue nil }
end

Expand All @@ -30,10 +32,18 @@ def test_stop_tcp
end

def test_stop_unix
ctl_unix
end

def test_halt_unix
ctl_unix 'halt'
end

def ctl_unix(signal='stop')
skip UNIX_SKT_MSG unless UNIX_SKT_EXIST
cli_server "-q test/rackup/sleep.ru --control-url unix://#{@control_path} --control-token #{TOKEN} -S #{@state_path}", unix: true

cli_pumactl "stop", unix: true
cli_pumactl signal, unix: true

_, status = Process.wait2(@pid)
assert_equal 0, status
Expand Down