Bug #8492

ObjectSpace.after_gc_start_hook aborts with GC.stress

Added by Yui NARUSE about 2 years ago. Updated over 1 year ago.

[ruby-dev:47400]
Status:Closed
Priority:Normal
Assignee:Koichi Sasada
ruby -v:ruby 2.1.0dev (2013-06-05 trunk 41080) [x86_64-freebsd9.1] Backport:1.9.3: DONTNEED, 2.0.0: DONTNEED

Description

以下を実行すると assert(during_gc > 0) に失敗して abort します。
ruby -robjspace -e'ObjectSpace.after_gc_start_hook=proc{};GC.stress=true;{}'
gc.c:3818 の
gc_event_hook(objspace, RUBY_INTERNAL_EVENT_GC_START, 0 /* TODO: pass minor/immediate flag? */);
実行後に、during_gc が 0 になっている模様。

Associated revisions

Revision 43245
Added by Nobuyoshi Nakada over 1 year ago

vm_trace.c: fix infinite hook

  • thread.c (rb_threadptr_execute_interrupts): flush postponed job only once at last.
  • vm_trace.c (rb_postponed_job_flush): defer calling postponed jobs registered while flushing to get rid of infinite reentrance of ObjectSpace.after_gc_start_hook. [Bug #8492]

Revision 43245
Added by Nobuyoshi Nakada over 1 year ago

vm_trace.c: fix infinite hook

  • thread.c (rb_threadptr_execute_interrupts): flush postponed job only once at last.
  • vm_trace.c (rb_postponed_job_flush): defer calling postponed jobs registered while flushing to get rid of infinite reentrance of ObjectSpace.after_gc_start_hook. [Bug #8492]

History

#1 Updated by Koichi Sasada over 1 year ago

随分放置してしまってすみません。
これ、今でもなりますか? 手元ではなんか

$ ./ruby -robjspace -e'ObjectSpace.after_gc_start_hook=proc{};GC.stress=true;{}'
セグメンテーション違反です

などと出てしまう。これはこれでまずかろう、という気もしますが...。

#2 Updated by Nobuyoshi Nakada over 1 year ago

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

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


vm_trace.c: fix infinite hook

  • thread.c (rb_threadptr_execute_interrupts): flush postponed job only once at last.
  • vm_trace.c (rb_postponed_job_flush): defer calling postponed jobs registered while flushing to get rid of infinite reentrance of ObjectSpace.after_gc_start_hook. [Bug #8492]

#3 Updated by Tomoyuki Chikanaga over 1 year ago

  • Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN to 1.9.3: DONTNEED, 2.0.0: DONTNEED

Also available in: Atom PDF