diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-11-10 11:05:00 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-11-10 11:05:00 +0000 |
commit | 33bb38a644c62edadec677465b2b08eea4756593 (patch) | |
tree | 874f34213585bda9bedebebb79f8eb01d2a3ad3c | |
parent | fd9f6bde957ce681fed49182be02124ecc89b362 (diff) | |
download | ruby-33bb38a644c62edadec677465b2b08eea4756593.tar.gz |
* lib/webrick/server.rb: Setup shutdown pipe in listen method.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48362 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | lib/webrick/server.rb | 9 | ||||
-rw-r--r-- | lib/webrick/ssl.rb | 1 | ||||
-rw-r--r-- | test/webrick/test_server.rb | 32 |
4 files changed, 45 insertions, 1 deletions
@@ -1,3 +1,7 @@ +Mon Nov 10 20:04:16 2014 Tanaka Akira <akr@fsij.org> + + * lib/webrick/server.rb: Setup shutdown pipe in listen method. + Mon Nov 10 19:37:09 2014 NAKAMURA Usaku <usa@ruby-lang.org> * win32/win32.c, include/win32/win32.h (rb_w32_set_nonblock): new diff --git a/lib/webrick/server.rb b/lib/webrick/server.rb index c779d37354..4aafd1e7fe 100644 --- a/lib/webrick/server.rb +++ b/lib/webrick/server.rb @@ -115,7 +115,6 @@ module WEBrick if @config[:Port] == 0 @config[:Port] = @listeners[0].addr[1] end - @shutdown_pipe = IO.pipe end end @@ -132,6 +131,7 @@ module WEBrick def listen(address, port) @listeners += Utils::create_listeners(address, port, @logger) + setup_shutdown_pipe end ## @@ -321,6 +321,13 @@ module WEBrick end end + def setup_shutdown_pipe + if !@shutdown_pipe + @shutdown_pipe = IO.pipe + end + @shutdown_pipe + end + def cleanup_shutdown_pipe(shutdown_pipe) @shutdown_pipe = nil shutdown_pipe.each {|io| diff --git a/lib/webrick/ssl.rb b/lib/webrick/ssl.rb index 5e296dbae2..19c1e104da 100644 --- a/lib/webrick/ssl.rb +++ b/lib/webrick/ssl.rb @@ -162,6 +162,7 @@ module WEBrick } end @listeners += listeners + setup_shutdown_pipe end ## diff --git a/test/webrick/test_server.rb b/test/webrick/test_server.rb index f765da6861..043d439cb7 100644 --- a/test/webrick/test_server.rb +++ b/test/webrick/test_server.rb @@ -96,4 +96,36 @@ class TestWEBrickServer < Test::Unit::TestCase w.close end end + + def test_restart + address = '127.0.0.1' + port = 0 + log = [] + config = { + :BindAddress => address, + :Port => port, + :Logger => WEBrick::Log.new(log, WEBrick::BasicLog::WARN), + } + server = Echo.new(config) + client_proc = lambda {|str| + begin + ret = server.listeners.first.connect_address.connect {|s| + s.write(str) + s.close_write + s.read + } + assert_equal(str, ret) + ensure + server.shutdown + end + } + server_thread = Thread.new { server.start } + client_thread = Thread.new { client_proc.call("a") } + assert_join_threads([client_thread, server_thread]) + server.listen(address, port) + server_thread = Thread.new { server.start } + client_thread = Thread.new { client_proc.call("b") } + assert_join_threads([client_thread, server_thread]) + assert_equal([], log) + end end |