Project

General

Profile

Actions

Backport #9463

closed

SEGV when calling GC.start in a finalizer

Added by usa (Usaku NAKAMURA) almost 11 years ago. Updated almost 11 years ago.

Status:
Closed
[ruby-dev:47939]

Description

minimum reproduce code:

raise_proc = proc do |id|
  GC.start
end
3.times do
  ObjectSpace.define_finalizer(Object.new, raise_proc)
end

to fix this, need to backport r33361 and r33460.


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #9205: Assertion failed: heap_pages_deferred_final == 0Closed12/03/2013Actions

Updated by usa (Usaku NAKAMURA) almost 11 years ago

  • Related to Bug #9205: Assertion failed: heap_pages_deferred_final == 0 added

Updated by usa (Usaku NAKAMURA) almost 11 years ago

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

Applied in changeset r44762.


merge revision(s) 33361,33460: [Backport #9463]

* gc.c (slot_sweep, rb_gc_finalize_deferred)
  (rb_objspace_call_finalizer, rb_gc): run finalizers
  sequencially.  [ruby-dev:44562]

* gc.c (rb_gc_finalize_deferred, rb_objspace_call_finalizer):
  should use ATOMIC_EXCHANGE() to check the previous value.
  [ruby-dev:44596] [Bug #5439]
Actions

Also available in: Atom PDF

Like0
Like0Like0