Actions
Bug #14171
closedcan't alloc thread (ThreadError) in DRbServer#main_loop
Description
The bug can be reproduced by adding Thread.report_on_exception = true
at the top of lib/drb/drb.rb.
DRbTests::TestBug4409#test_bug4409#<Thread:0x000055597db83478@ruby/lib/drb/drb.rb:1657 aborting> terminated with exception:
Traceback (most recent call last):
4: from ruby/lib/drb/drb.rb:1665:in `block in main_loop'
3: from ruby/lib/drb/drb.rb:1665:in `loop'
2: from ruby/lib/drb/drb.rb:1679:in `block (2 levels) in main_loop'
1: from ruby/lib/drb/drb.rb:1677:in `ensure in block (2 levels) in main_loop'
ruby/lib/drb/drb.rb:1677:in `new': can't alloc thread (ThreadError)
This Thread.new fails:
if Thread.current['DRb']['stop_service']
Thread.new { stop_service }
end
I think we don't need an extra Thread to stop the DRbServer.
We just need to tweak the logic in DRbServer#stop_service.
Proposed patch attached.
I need to commit it soon to avoid hundreds of warnings during make test-all for #14143.
@seki (Masatoshi Seki) Could you review?
Files
Updated by Eregon (Benoit Daloze) almost 7 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r61184.
Avoid creating a Thread for shutting down a DRbServer
- lib/drb/drb.rb: avoid creating a Thread and call the shutdown logic
directly. Do not try to kill or join the current Thread.
Thread.new { stop_service } caused "can't alloc thread (ThreadError)",
which is shown with Thread.report_on_exception = true.
[Bug #14171]
Updated by Eregon (Benoit Daloze) almost 7 years ago
I also applied @seki's fix in r61342.
Actions
Like0
Like0Like0Like0