Project

General

Profile

Actions

Bug #14171

closed

can't alloc thread (ThreadError) in DRbServer#main_loop

Added by Eregon (Benoit Daloze) over 6 years ago. Updated over 6 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 2.5.0dev (2017-12-12 trunk 61147) [x86_64-linux]
[ruby-core:84213]

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0