From 02242be023b7958b74e0effed0f063a743c4510c Mon Sep 17 00:00:00 2001
From: Hongli Lai (Phusion) <hongli@phusion.nl>
Date: Thu, 25 Feb 2010 12:07:23 +0100
Subject: [PATCH] Add the ability to query the command and control port when starting remote debugging. Useful for starting remote debugging on a random available port.

---
 cli/ruby-debug.rb |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/cli/ruby-debug.rb b/cli/ruby-debug.rb
index 2c4e6bf..28fe7de 100644
--- a/cli/ruby-debug.rb
+++ b/cli/ruby-debug.rb
@@ -35,7 +35,7 @@ module Debugger
     # if the call stack is truncated.
     attr_accessor :start_sentinal 
     
-    attr_reader :thread, :control_thread
+    attr_reader :thread, :control_thread, :cmd_port, :ctrl_port
 
     def interface=(value) # :nodoc:
       handler.interface = value
@@ -58,15 +58,16 @@ module Debugger
         cmd_port, ctrl_port = port, port + 1
       end
 
-      start_control(host, ctrl_port)
+      ctrl_port = start_control(host, ctrl_port)
       
       yield if block_given?
       
       mutex = Mutex.new
       proceed = ConditionVariable.new
       
+      server = TCPServer.new(host, cmd_port)
+      @cmd_port = cmd_port = server.addr[1]
       @thread = DebugThread.new do
-        server = TCPServer.new(host, cmd_port)
         while (session = server.accept)
           self.interface = RemoteInterface.new(session)
           if wait_connection
@@ -86,15 +87,17 @@ module Debugger
     
     def start_control(host = nil, ctrl_port = PORT + 1) # :nodoc:
       raise "Debugger is not started" unless started?
-      return if defined?(@control_thread) && @control_thread
+      return @ctrl_port if defined?(@control_thread) && @control_thread
+      server = TCPServer.new(host, ctrl_port)
+      @ctrl_port = server.addr[1]
       @control_thread = DebugThread.new do
-        server = TCPServer.new(host, ctrl_port)
         while (session = server.accept)
           interface = RemoteInterface.new(session)
           processor = ControlCommandProcessor.new(interface)
           processor.process_commands
         end
       end
+      @ctrl_port
     end
     
     #
-- 
1.6.6

