Issue #9040 has been updated by akr (Akira Tanaka).

File readline-release-gvl-3.patch added

I think it's better to not trust the value of rl_instream and rl_outstream
because they can be modified by other libraries.

I updated my readline patch submitted to [Bug #8749].
----------------------------------------
Bug #9040: Readline duplicate file descriptors but doesn't close them 
https://bugs.ruby-lang.org/issues/9040#change-42531

Author: eweb (Eamonn Webster)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: current: 2.1.0
ruby -v: ruby 2.1.0dev (2013-09-22 trunk 43011) [x86_64-darwin12.5.0]
Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN


This depends on the max open files limit, happens quicker the lower the limit.
irb crashes just by holding down return. Uses two file descriptors per prompt.

input=': Too many open files - dup (Errno::EMFILE) 

or if you don't want to hold down the key...

ulimit -n 100
ruby -r readline -e "100.times{ Readline.input = STDIN }"

A recent patch to readline to avoid a segv when the underlying FILE has been closed, changed the way that the input and output streams
are assigned. 

When a stream is assigned, its file descriptor is extracted, dup'ed and passed to fdopen.
As the file descriptor is dup'ed the two file descriptors (in the FILE owned by the readline library and the one inside the ruby rb_io_t)
don't match. 
 
Before assigning the previous value should be cleared. But this only happens when the ruby stream has been closed or when the two file descriptors are the same (never).

As we always dup the file descriptors, we own them, and should always close them.





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