* 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
This commit is contained in:
naruse 2012-04-13 06:21:50 +00:00
Родитель d2e69f8584
Коммит deb0519aec
3 изменённых файлов: 23 добавлений и 15 удалений

Просмотреть файл

@ -1,3 +1,11 @@
Fri Apr 13 15:17:36 2012 NARUSE, Yui <naruse@ruby-lang.org>
* 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 <tadf@dotrb.org> Thu Apr 12 19:51:45 2012 Tadayoshi Funaba <tadf@dotrb.org>
* ext/date/date_core.c: added some notes. * ext/date/date_core.c: added some notes.
@ -7,11 +15,11 @@ Wed Apr 11 17:16:49 2012 Koichi Sasada <ko1@atdot.net>
* compile.c (compile_array, compile_array_): * compile.c (compile_array, compile_array_):
Divide big array (or hash) literals into several blocks and Divide big array (or hash) literals into several blocks and
concatetene them. There was a problem that a big array (hash) concatetene them. There was a problem that a big array (hash)
literal causes SystemStackError exception (stack overflow) literal causes SystemStackError exception (stack overflow)
because VM push all contents of the literal onto VM stack to because VM push all contents of the literal onto VM stack to
make an array (or hash). To solve this issue, we make several make an array (or hash). To solve this issue, we make several
arrays (hashes) and concatenate them to make a big array (hash) arrays (hashes) and concatenate them to make a big array (hash)
object. [ruby-dev:37701] [Bug #982] object. [ruby-dev:37701] [Bug #982]
* compile.c (iseq_compile_each, setup_args): use modified * compile.c (iseq_compile_each, setup_args): use modified
compile_array. compile_array.

Просмотреть файл

@ -133,16 +133,17 @@ module WEBrick
rescue Errno::EBADF, IOError => ex rescue Errno::EBADF, IOError => ex
# if the listening socket was closed in GenericServer#shutdown, # if the listening socket was closed in GenericServer#shutdown,
# IO::select raise it. # IO::select raise it.
rescue StandardError => ex rescue Interrupt => ex # ^C
msg = "#{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}"
@logger.error msg
rescue Exception => ex
@logger.fatal ex @logger.fatal ex
raise raise
rescue Exception => ex
msg = "#{ex.class}: #{ex.message}\n\t#{ex.backtrace[0]}"
@logger.error msg
end end
end end
ensure ensure
@status = :Shutdown
@logger.info "going to shutdown ..." @logger.info "going to shutdown ..."
thgroup.list.each{|th| th.join if th[:WEBrickThread] } thgroup.list.each{|th| th.join if th[:WEBrickThread] }
call_callback(:StopCallback) call_callback(:StopCallback)
@ -157,7 +158,7 @@ module WEBrick
def stop def stop
if @status == :Running if @status == :Running
@status = :Stop @status = :Shutdown
end end
end end

Просмотреть файл

@ -29,23 +29,22 @@ class TestWEBrickServer < Test::Unit::TestCase
:StopCallback => Proc.new{ stopped += 1 }, :StopCallback => Proc.new{ stopped += 1 },
} }
e = assert_raises(Exception) do e = assert_raises(Interrupt) do
TestWEBrick.start_server(Echo, config) { |server, addr, port, log| TestWEBrick.start_server(Echo, config) { |server, addr, port, log|
listener = server.listeners.first listener = server.listeners.first
def listener.accept def listener.accept
raise Exception, 'fatal' # simulate ^C Process.kill(:INT, $$) # simulate ^C
end end
true while server.status != :Running Thread.pass while server.status != :Running
TCPSocket.open(addr, port) { |sock| sock << "foo\n" } TCPSocket.open(addr, port) { |sock| sock << "foo\n" }
sleep 0.1 until server.status == :Stop Thread.pass until server.status == :Stop
} }
end end
assert_equal('fatal', e.message)
assert_equal(stopped, 1) assert_equal(stopped, 1)
end end