Project

General

Profile

Actions

Bug #18902

closed

Thread#value crash if the thread was killed because of a fork

Added by byroot (Jean Boussier) almost 2 years ago. Updated over 1 year ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.2.0dev, ruby 3.1.2p20, ruby 3.0.3p157, ruby 2.7.5p203
[ruby-core:109162]

Description

Reproduction script

thr = Thread.new { sleep 10} 
fork do
  p thr.status # =>false
  p thr.join # => #<Thread:0x00000001008ae480 /tmp/thread-join.rb:1 dead>
  p thr.value # Assertion Failed: ./vm_core.h:1303:VM_ENV_FLAGS:FIXNUM_P(flags) (or crash if RUBY_DEBUG isn't set)
end

What happens is that rb_thread_t->value is initialized to Qundef, so when the thread is killed by a fork, Thread#value tries to return Qundef which laters crash the VM.

I have a patch incomming.

Actions #1

Updated by byroot (Jean Boussier) almost 2 years ago

  • Status changed from Open to Closed

Applied in changeset git|65ae2bb2e045aa8b668d3c30515f5a6cb3eb68ad.


Thread#value: handle threads killed by a fork

[Bug #18902]

When a thread is killed because we forked, the value if left
to Qundef. Returning it woudl crash the VM.

Updated by nagachika (Tomoyuki Chikanaga) over 1 year ago

  • Backport changed from 2.7: REQUIRED, 3.0: REQUIRED, 3.1: REQUIRED to 2.7: REQUIRED, 3.0: REQUIRED, 3.1: DONE

ruby_3_1 720de2008ca06edb22e5ad7d1432fee4f2575e00 merged revision(s) 65ae2bb2e045aa8b668d3c30515f5a6cb3eb68ad.

Actions

Also available in: Atom PDF

Like0
Like0Like0