aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog18
-rw-r--r--lib/webrick/server.rb11
-rw-r--r--test/webrick/test_server.rb9
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 <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>
* 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_):
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