Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 9151

Show
Ignore:
Timestamp:
03/30/08 23:07:52 (5 months ago)
Author:
bitsweat
Message:

Handle exit, reload, and restart immediately if not processing a request. References #11471 [guillaume, Jeremy Kemper]

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/railties/lib/fcgi_handler.rb

    r8132 r9151  
    7474      cgi = nil 
    7575 
    76       provider.each_cgi do |cgi| 
    77         process_request(cgi) 
    78  
    79         case when_ready 
    80           when :reload 
    81             reload! 
    82           when :restart 
    83             close_connection(cgi) 
    84             restart! 
    85           when :exit 
    86             close_connection(cgi) 
    87             break 
     76      catch :exit do 
     77        provider.each_cgi do |cgi| 
     78          process_request(cgi) 
     79 
     80          case when_ready 
     81            when :reload 
     82              reload! 
     83            when :restart 
     84              close_connection(cgi) 
     85              restart! 
     86            when :exit 
     87              close_connection(cgi) 
     88              throw :exit 
     89          end 
    8890        end 
    8991      end 
     
    9496 
    9597    def process_request(cgi) 
    96       @when_ready = nil 
     98      @processing, @when_ready = true, nil 
    9799      gc_countdown 
    98100 
     
    106108        end 
    107109      end 
     110    ensure 
     111      @processing = false 
    108112    end 
    109113 
     
    159163    def exit_handler(signal) 
    160164      dispatcher_log :info, "asked to stop ASAP" 
    161       @when_ready = :exit 
     165      if @processing 
     166        @when_ready = :exit 
     167      else 
     168        throw :exit 
     169      end 
    162170    end 
    163171 
    164172    def reload_handler(signal) 
    165173      dispatcher_log :info, "asked to reload ASAP" 
    166       @when_ready = :reload 
     174      if @processing 
     175        @when_ready = :reload 
     176      else 
     177        reload! 
     178      end 
    167179    end 
    168180 
    169181    def restart_handler(signal) 
    170182      dispatcher_log :info, "asked to restart ASAP" 
    171       @when_ready = :restart 
     183      if @processing 
     184        @when_ready = :restart 
     185      else 
     186        restart! 
     187      end 
    172188    end 
    173189