Issue #14171 has been updated by Eregon (Benoit Daloze).


I also applied @seki's fix in r61342.

----------------------------------------
Bug #14171: can't alloc thread (ThreadError) in DRbServer#main_loop
https://bugs.ruby-lang.org/issues/14171#change-68528

* Author: Eregon (Benoit Daloze)
* Status: Closed
* Priority: Normal
* Assignee: seki (Masatoshi Seki)
* Target version: 2.5
* ruby -v: ruby 2.5.0dev (2017-12-12 trunk 61147) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
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 Could you review?

---Files--------------------------------
0001-Avoid-creating-a-Thread-for-shutting-down-a-DRbServe.patch (1.89 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>