[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]