Project

General

Profile

Actions

Bug #10868

closed

Object allocation within an extension during garbage collection terminates the Ruby process

Added by charlez (Charles Leu) over 9 years ago. Updated over 9 years ago.

Status:
Third Party's Issue
Assignee:
-
Target version:
-
ruby -v:
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux], ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux], ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-linux]
Backport:
[ruby-core:68175]

Description

It appears that when a CFUNC makes an allocation when garbage collection is running within a different thread/context, it yields the error "[BUG] object allocation during garbage collection phase" and the Ruby process is subsequently terminated.

Ruby versions 1.9.3, 2.1.5, and 2.2.0 all yield the same behavior (per the attached files).

Note that similar behavior has been reported within issues 7750, 9090, and 1049.


Files

ruby_2.1.5_bug.txt (28.9 KB) ruby_2.1.5_bug.txt charlez (Charles Leu), 02/19/2015 02:53 AM
ruby_1.9.3_bug.txt (28.6 KB) ruby_1.9.3_bug.txt charlez (Charles Leu), 02/19/2015 02:53 AM
ruby_2.2.0_bug.txt (29.3 KB) ruby_2.2.0_bug.txt charlez (Charles Leu), 02/19/2015 02:53 AM

Updated by nobu (Nobuyoshi Nakada) over 9 years ago

  • Status changed from Open to Third Party's Issue

Using ffi.

Updated by charlez (Charles Leu) over 9 years ago

For the benefit of those encountering this same (or similar) behavior:

  • This particular problem was observed with ffi-rzmq. It appears that ffi-rzmq code isn't fully thread aware, hence this issue.
  • The problem was elicited by creating a single socket, and performing I/O via the single socket from multiple threads.
  • It is OK to create a socket in one thread, and perform I/O with the socket within a single separate sibling thread.
  • It is OK to create a socket per thread, and have each thread perform I/O using its designated socket.
Actions

Also available in: Atom PDF

Like0
Like0Like0