Project

General

Profile

Actions

Backport #6618

closed

Seg Fault when printing thread.keys

Added by cantregister (Why Cantiregister) over 10 years ago. Updated almost 10 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
[ruby-core:45741]

Description

This is very easy to reproduce:

require 'bigdecimal'

for thr in Thread.list
puts thr.keys
end

Somehow a key is introduced to the thread with the object ID of 8.

Attempting to inspect or to_s this key results in a seg fault.

1.9.3p194 :001 > ObjectSpace._id2ref(8)
RangeError: 0x00000000000008 is not symbol id value

It is not clear how this object is created or inserted into the Thread.

Updated by cantregister (Why Cantiregister) over 10 years ago

threadtest.rb

puts ">>>>>>>>>>>>>>>> starting"

require 'bigdecimal'

for thr in Thread.list
puts thr.keys
end

mac:code user$ ruby threadtest.rb

starting
threadtest.rb:6: [BUG] Segmentation fault
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0]

-- Control frame information -----------------------------------------------
c:0009 p:---- s:0023 b:0023 l:000022 d:000022 CFUNC :to_s
c:0008 p:---- s:0021 b:0021 l:000020 d:000020 CFUNC :puts
c:0007 p:---- s:0019 b:0019 l:000018 d:000018 CFUNC :puts
c:0006 p:0024 s:0015 b:0015 l:001948 d:000014 BLOCK threadtest.rb:6
c:0005 p:---- s:0012 b:0012 l:000011 d:000011 FINISH
c:0004 p:---- s:0010 b:0010 l:000009 d:000009 CFUNC :each
c:0003 p:0045 s:0007 b:0007 l:001948 d:000a00 EVAL threadtest.rb:5
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:001948 d:001948 TOP

-- Ruby level backtrace information ----------------------------------------
threadtest.rb:5:in <main>' threadtest.rb:5:in each'
threadtest.rb:6:in block in <main>' threadtest.rb:6:in puts'
threadtest.rb:6:in puts' threadtest.rb:6:in to_s'

-- C level backtrace information -------------------------------------------

See Crash Report log file under ~/Library/Logs/CrashReporter or
/Library/Logs/CrashReporter, for the more detail of.

-- Other runtime information -----------------------------------------------

  • Loaded script: threadtest.rb

  • Loaded features:

    0 enumerator.so
    1 /Users/user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin11.3.0/enc/encdb.bundle
    2 /Users/user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin11.3.0/enc/trans/transdb.bundle
    3 /Users/user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/defaults.rb
    4 /Users/user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin11.3.0/rbconfig.rb
    5 /Users/user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/deprecate.rb
    6 /Users/user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/exceptions.rb
    7 /Users/user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb
    8 /Users/user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems.rb
    9 /Users/user/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin11.3.0/bigdecimal.bundle

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Abort trap: 6

Updated by cantregister (Why Cantiregister) over 10 years ago

sorry about the strange username, i tried to register 3 times before this one worked.

Actions #3

Updated by naruse (Yui NARUSE) over 10 years ago

  • Tracker changed from Bug to Backport
  • Project changed from Ruby master to Backport193
  • Target version deleted (1.9.3)
Actions #4

Updated by naruse (Yui NARUSE) over 10 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r36159.
Why, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


merge revision(s) 35625: [Backport #6618]

* thread.c (rb_threadptr_execute_interrupts_common):
  test_signal_requiring of test/ruby/test_signal.rb fail if the sub
  process is killed on waiting IO in lex_io_gets in rb_load_file in
  rb_load_internal in require.
  This is because
  (1) the process receive the killing signal in
      rb_thread_io_blocking_region in rb_read_internal in lex_io_gets.
  (2) set th->errinfo as INT2FIX(TAG_FATAL) at
      rb_threadptr_execute_interrupts_common.
  (3) escape rb_load_file in rb_load_internal and jump to EXEC_TAG()
      without set loaded as TRUE.
  (4) call first rb_exc_raise(GET_THREAD()->errinfo); because loaded
      is FALSE as above. this errinfo should be an exception object
      but this is INT2FIX(TAG_FATAL).
  Don't call first rb_exc_raise if GET_THREAD()->errinfo is Fixnum.
Actions

Also available in: Atom PDF