Project

General

Profile

Actions

Bug #9040

closed

Readline duplicate file descriptors but doesn't close them

Added by eweb (Eamonn Webster) about 11 years ago. Updated about 11 years ago.

Status:
Closed
Assignee:
-
Target version:
ruby -v:
ruby 2.1.0dev (2013-09-22 trunk 43011) [x86_64-darwin12.5.0]
[ruby-core:57951]

Description

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.


Files

readline_fix.patch (2.51 KB) readline_fix.patch eweb (Eamonn Webster), 10/21/2013 09:36 PM
readline-release-gvl-3.patch (8.06 KB) readline-release-gvl-3.patch akr (Akira Tanaka), 10/21/2013 11:51 PM
readline-release-gvl-4.patch (7.44 KB) readline-release-gvl-4.patch akr (Akira Tanaka), 10/22/2013 07:47 PM
readline-release-gvl-5.patch (7.99 KB) readline-release-gvl-5.patch akr (Akira Tanaka), 10/23/2013 06:17 PM

Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #12950: irb: 'input-method.rb:151: [BUG] Segmentation fault' / 'malloc(): smallbin double linked list corrupted'Third Party's IssueActions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0