ruby-changes:37836
From: akr <ko1@a...>
Date: Tue, 10 Mar 2015 20:05:52 +0900 (JST)
Subject: [ruby-changes:37836] akr:r49917 (trunk): * lib/webrick/server.rb: Invoke setup_shutdown_pipe in start method
akr 2015-03-10 20:05:21 +0900 (Tue, 10 Mar 2015) New Revision: 49917 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49917 Log: * lib/webrick/server.rb: Invoke setup_shutdown_pipe in start method instead of listen method. [ruby-core:68476] [Bug #10956] Reported by Shintaro Kojima. Modified files: trunk/ChangeLog trunk/lib/webrick/server.rb trunk/test/webrick/test_server.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 49916) +++ ChangeLog (revision 49917) @@ -1,3 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Tue Mar 10 20:03:41 2015 Tanaka Akira <akr@f...> + + * lib/webrick/server.rb: Invoke setup_shutdown_pipe in start method + instead of listen method. + [ruby-core:68476] [Bug #10956] Reported by Shintaro Kojima. + Tue Mar 10 17:27:27 2015 Koichi Sasada <ko1@a...> * thread.c (thread_join): Fixnum (except TAG_FATAL) and Index: lib/webrick/server.rb =================================================================== --- lib/webrick/server.rb (revision 49916) +++ lib/webrick/server.rb (revision 49917) @@ -131,7 +131,6 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/server.rb#L131 def listen(address, port) @listeners += Utils::create_listeners(address, port) - setup_shutdown_pipe end ## @@ -159,6 +158,8 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/server.rb#L158 raise ServerError, "already started." if @status != :Stop server_type = @config[:ServerType] || SimpleServer + setup_shutdown_pipe + server_type.start{ @logger.info \ "#{self.class}#start: pid=#{$$} port=#{@config[:Port]}" @@ -330,6 +331,7 @@ module WEBrick https://github.com/ruby/ruby/blob/trunk/lib/webrick/server.rb#L331 def cleanup_shutdown_pipe(shutdown_pipe) @shutdown_pipe = nil + return if !shutdown_pipe shutdown_pipe.each {|io| if !io.closed? begin Index: test/webrick/test_server.rb =================================================================== --- test/webrick/test_server.rb (revision 49916) +++ test/webrick/test_server.rb (revision 49917) @@ -97,7 +97,7 @@ class TestWEBrickServer < Test::Unit::Te https://github.com/ruby/ruby/blob/trunk/test/webrick/test_server.rb#L97 end end - def test_restart + def test_restart_after_shutdown address = '127.0.0.1' port = 0 log = [] @@ -128,4 +128,30 @@ class TestWEBrickServer < Test::Unit::Te https://github.com/ruby/ruby/blob/trunk/test/webrick/test_server.rb#L128 assert_join_threads([client_thread, server_thread]) assert_equal([], log) end + + def test_restart_after_stop + log = Object.new + class << log + include Test::Unit::Assertions + def <<(msg) + flunk "unexpected log: #{msg.inspect}" + end + end + warn_flunk = WEBrick::Log.new(log, WEBrick::BasicLog::WARN) + server = WEBrick::HTTPServer.new( + :BindAddress => '0.0.0.0', + :Port => 0, + :Logger => warn_flunk) + 2.times { + server_thread = Thread.start { + server.start + } + client_thread = Thread.start { + sleep 0.1 until server.status == :Running || !server_thread.status + server.stop + sleep 0.1 until server.status == :Stop || !server_thread.status + } + assert_join_threads([client_thread, server_thread]) + } + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/