From deb0519aec1e68bdcf019d99e3e8be55fd5b2faf Mon Sep 17 00:00:00 2001 From: naruse Date: Fri, 13 Apr 2012 06:21:50 +0000 Subject: [PATCH] * lib/webrick/server.rb (WEBrick::GenericServer#stop): fix r35303; this method is to deny new connections, not shutdown yet. * lib/webrick/server.rb (WEBrick::GenericServer#start): re-raise exception only when the exception is Interrupt (^C). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35315 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 18 +++++++++++++----- lib/webrick/server.rb | 11 ++++++----- test/webrick/test_server.rb | 9 ++++----- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index a87f5b85a4..462ca7dba6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Fri Apr 13 15:17:36 2012 NARUSE, Yui + + * lib/webrick/server.rb (WEBrick::GenericServer#stop): fix r35303; + this method is to deny new connections, not shutdown yet. + + * lib/webrick/server.rb (WEBrick::GenericServer#start): + re-raise exception only when the exception is Interrupt (^C). + Thu Apr 12 19:51:45 2012 Tadayoshi Funaba * ext/date/date_core.c: added some notes. @@ -7,11 +15,11 @@ Wed Apr 11 17:16:49 2012 Koichi Sasada * compile.c (compile_array, compile_array_): Divide big array (or hash) literals into several blocks and concatetene them. There was a problem that a big array (hash) - literal causes SystemStackError exception (stack overflow) - because VM push all contents of the literal onto VM stack to - make an array (or hash). To solve this issue, we make several - arrays (hashes) and concatenate them to make a big array (hash) - object. [ruby-dev:37701] [Bug #982] + literal causes SystemStackError exception (stack overflow) + because VM push all contents of the literal onto VM stack to + make an array (or hash). To solve this issue, we make several + arrays (hashes) and concatenate them to make a big array (hash) + object. [ruby-dev:37701] [Bug #982] * compile.c (iseq_compile_each, setup_args): use modified compile_array. diff --git a/lib/webrick/server.rb b/lib/webrick/server.rb index 22b91ad535..bd9dcb0d1c 100644 --- a/lib/webrick/server.rb +++ b/lib/webrick/server.rb @@ -133,16 +133,17 @@ module WEBrick rescue Errno::EBADF, IOError => ex # if the listening socket was closed in GenericServer#shutdown, # IO::select raise it. - rescue StandardError => ex - msg = "#{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}" - @logger.error msg - rescue Exception => ex + rescue Interrupt => ex # ^C @logger.fatal ex raise + rescue Exception => ex + msg = "#{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}" + @logger.error msg end end ensure + @status = :Shutdown @logger.info "going to shutdown ..." thgroup.list.each{|th| th.join if th[:WEBrickThread] } call_callback(:StopCallback) @@ -157,7 +158,7 @@ module WEBrick def stop if @status == :Running - @status = :Stop + @status = :Shutdown end end diff --git a/test/webrick/test_server.rb b/test/webrick/test_server.rb index 534fe9b077..86fccac09c 100644 --- a/test/webrick/test_server.rb +++ b/test/webrick/test_server.rb @@ -29,23 +29,22 @@ class TestWEBrickServer < Test::Unit::TestCase :StopCallback => Proc.new{ stopped += 1 }, } - e = assert_raises(Exception) do + e = assert_raises(Interrupt) do TestWEBrick.start_server(Echo, config) { |server, addr, port, log| listener = server.listeners.first def listener.accept - raise Exception, 'fatal' # simulate ^C + Process.kill(:INT, $$) # simulate ^C end - true while server.status != :Running + Thread.pass while server.status != :Running TCPSocket.open(addr, port) { |sock| sock << "foo\n" } - sleep 0.1 until server.status == :Stop + Thread.pass until server.status == :Stop } end - assert_equal('fatal', e.message) assert_equal(stopped, 1) end