Added SIGTRAP signal handler to RailsFCGIHandler that'll force the process...

Added SIGTRAP signal handler to RailsFCGIHandler that'll force the process into a breakpoint after the next request. This breakpoint can then be caught with script/breakpointer and give you access to the Ruby image inside that process. Useful for debugging memory leaks among other things [DHH]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3618 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 8fb9d7cb
*SVN*
* Added SIGTRAP signal handler to RailsFCGIHandler that'll force the process into a breakpoint after the next request. This breakpoint can then be caught with script/breakpointer and give you access to the Ruby image inside that process. Useful for debugging memory leaks among other things [DHH]
* Update script.aculo.us to V1.5.2 [Thomas Fuchs]
* Changed default lighttpd.conf to use CWD from lighttpd 1.4.10 that allows the same configuration to be used for both detach and not. Also ensured that auto-repeaping of FCGIs only happens when lighttpd is not detached. [DHH]
......
......@@ -5,10 +5,11 @@
class RailsFCGIHandler
SIGNALS = {
'HUP' => :reload,
'TERM' => :exit_now,
'USR1' => :exit,
'USR2' => :restart
'HUP' => :reload,
'TERM' => :exit_now,
'USR1' => :exit,
'USR2' => :restart,
'SIGTRAP' => :breakpoint
}
attr_reader :when_ready
......@@ -61,6 +62,9 @@ def process!(provider = FCGI)
when :exit
close_connection(cgi)
break
when :breakpoint
close_connection(cgi)
breakpoint!
end
gc_countdown
......@@ -137,6 +141,11 @@ def restart_handler(signal)
@when_ready = :restart
end
def breakpoint_handler(signal)
dispatcher_log :info, "asked to breakpoint ASAP"
@when_ready = :breakpoint
end
def process_request(cgi)
Dispatcher.dispatch(cgi)
rescue Object => e
......@@ -170,6 +179,15 @@ def restore!
Dispatcher.reset_application!
ActionController::Routing::Routes.reload
end
def breakpoint!
require 'breakpoint'
port = defined?(BREAKPOINT_SERVER_PORT) ? BREAKPOINT_SERVER_PORT : 42531
Breakpoint.activate_drb("druby://localhost:#{port}", nil, !defined?(FastCGI))
dispatcher_log :info, "breakpointing"
breakpoint
@when_ready = nil
end
def run_gc!
@gc_request_countdown = gc_request_period
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册