diff options
author | Stan Lo <stan001212@gmail.com> | 2023-10-11 15:16:32 +0100 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-10-11 14:16:39 +0000 |
commit | cc311e1c4599200dd7437cd578e61c83067e555c (patch) | |
tree | 303c314f9f9a33d3da93b3b59d7031851af6b6dc | |
parent | 380c25f89f9873e6fe9ee7aebd93b8bd0d2de5a0 (diff) |
[ruby/irb] Avoid locking the debug UI to a single thread
(https://github.com/ruby/irb/pull/725)
Since `debug` stores and updates the target thread via its Session's
`@tc` variable, we don't need to and shouldn't lock the UI to the thread
that activates the integration.
https://github.com/ruby/irb/commit/202efdbf0c
-rw-r--r-- | lib/irb/debug.rb | 7 | ||||
-rw-r--r-- | lib/irb/debug/ui.rb | 5 |
2 files changed, 4 insertions, 8 deletions
diff --git a/lib/irb/debug.rb b/lib/irb/debug.rb index f819f850b1..e522d39300 100644 --- a/lib/irb/debug.rb +++ b/lib/irb/debug.rb @@ -32,17 +32,14 @@ module IRB end DEBUGGER__::CONFIG.set_config configure_irb_for_debugger(irb) - thread = Thread.current - DEBUGGER__.initialize_session{ IRB::Debug::UI.new(thread, irb) } + DEBUGGER__.initialize_session{ IRB::Debug::UI.new(irb) } end # When debug session was previously started but not by IRB if defined?(DEBUGGER__::SESSION) && !irb.context.with_debugger configure_irb_for_debugger(irb) - thread = Thread.current - - DEBUGGER__::SESSION.reset_ui(IRB::Debug::UI.new(thread, irb)) + DEBUGGER__::SESSION.reset_ui(IRB::Debug::UI.new(irb)) end # Apply patches to debug gem so it skips IRB frames diff --git a/lib/irb/debug/ui.rb b/lib/irb/debug/ui.rb index a4ca4fdf0f..307097b8c9 100644 --- a/lib/irb/debug/ui.rb +++ b/lib/irb/debug/ui.rb @@ -4,8 +4,7 @@ require 'debug/console' module IRB module Debug class UI < DEBUGGER__::UI_Base - def initialize(thread, irb) - @thread = thread + def initialize(irb) @irb = irb end @@ -56,7 +55,7 @@ module IRB def readline _ setup_interrupt do - tc = DEBUGGER__::SESSION.get_thread_client(@thread) + tc = DEBUGGER__::SESSION.instance_variable_get(:@tc) cmd = @irb.debug_readline(tc.current_frame.binding || TOPLEVEL_BINDING) case cmd |