about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorevanweaver <evanweaver@19e92222-5c0b-0410-8929-a290d50e31e9>2007-10-18 19:27:33 +0000
committerevanweaver <evanweaver@19e92222-5c0b-0410-8929-a290d50e31e9>2007-10-18 19:27:33 +0000
commit9b23459be9faf307162ddab2c5a7fe6797952a13 (patch)
tree53e52214f29b9cf4eda649919f044b8d4194f237
parenta511323f71cc533b513ef54eaf1adbbf03624df9 (diff)
downloadunicorn-9b23459be9faf307162ddab2c5a7fe6797952a13.tar.gz
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@687 19e92222-5c0b-0410-8929-a290d50e31e9
-rw-r--r--lib/mongrel.rb9
-rw-r--r--lib/mongrel/configurator.rb14
-rw-r--r--test/test_configurator.rb2
3 files changed, 14 insertions, 11 deletions
diff --git a/lib/mongrel.rb b/lib/mongrel.rb
index 1d95714..967f0cd 100644
--- a/lib/mongrel.rb
+++ b/lib/mongrel.rb
@@ -809,8 +809,13 @@ module Mongrel
 
     # Stops the acceptor thread and then causes the worker threads to finish
     # off the request queue before finally exiting.
-    def stop
-      @acceptor.raise(StopServer.new)
+    def stop(asynchronous=true)
+      if asynchronous
+        stopper = Thread.new { @acceptor.raise(StopServer.new) }
+        stopper.priority = 10
+      else
+        @acceptor.raise(StopServer.new)
+      end
     end
 
   end
diff --git a/lib/mongrel/configurator.rb b/lib/mongrel/configurator.rb
index c62f153..6c9a6c8 100644
--- a/lib/mongrel/configurator.rb
+++ b/lib/mongrel/configurator.rb
@@ -287,14 +287,10 @@ module Mongrel
     # Calls .stop on all the configured listeners so they
     # stop processing requests (gracefully).  By default it
     # assumes that you don't want to restart.
-    def stop(needs_restart=false)
-      @listeners.map do |name, listener|
-        stopper = Thread.new { listener.stop }
-        stopper.priority = 10
-        stopper
-      end.each do |stopper|
-        stopper.join
-      end
+    def stop(needs_restart=false, asynchronous=true)
+      @listeners.each {|name,s|
+        s.stop(asynchronous)
+      }
 
       @needs_restart = needs_restart
     end
@@ -373,6 +369,8 @@ module Mongrel
       if RUBY_PLATFORM !~ /mswin/
         # graceful shutdown
         trap("TERM") { log "TERM signal received."; stop }
+        trap("USR1") { log "USR1 received, toggling $mongrel_debug_client to #{!$mongrel_debug_client}"; $mongrel_debug_client = !$mongrel_debug_client }
+        # restart
         trap("USR2") { log "USR2 signal received."; stop(true) }
 
         log "Signals ready.  TERM => stop.  USR2 => restart.  INT => stop (no restart)."
diff --git a/test/test_configurator.rb b/test/test_configurator.rb
index 4e4d963..d8e9a11 100644
--- a/test/test_configurator.rb
+++ b/test/test_configurator.rb
@@ -78,7 +78,7 @@ class ConfiguratorTest < Test::Unit::TestCase
     end
 
     redirect_test_io do
-      config.stop
+      config.stop(false, true)
     end
 
     assert_raise Errno::EBADF, Errno::ECONNREFUSED do