Skip to content

Commit

Permalink
Ensure control server Unix socket is closed on shutdown
Browse files Browse the repository at this point in the history
Remove Binder#close_unix_paths
  • Loading branch information
wjordan committed Feb 11, 2020
1 parent f3c3bf5 commit cfc7b0f
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 8 deletions.
4 changes: 0 additions & 4 deletions lib/puma/binder.rb
Expand Up @@ -369,10 +369,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 which tcp port the launcher is using, if it's using TCP
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

0 comments on commit cfc7b0f

Please sign in to comment.