[ruby-cvs:56866] naruse:r49716 (ruby_2_2): merge revision(s) 49474, 49541, 49545, 49684: [Backport #10768]

naruse at ruby-lang.org naruse at ruby-lang.org
Tue Feb 24 15:39:52 JST 2015

naruse	2015-02-24 15:39:50 +0900 (Tue, 24 Feb 2015)

  New Revision: 49716


    merge revision(s) 49474,49541,49545,49684: [Backport #10768]
    * gc.c (rb_objspace_free): cause rb_bug if lazy sweep is in progress
      during rb_objspace_free. Adds extra protection for r46340.
      Patch by Vicent Marti. [Bug #10768] [ruby-core:67734]
    * gc.c (rb_objspace_call_finalizer): Ensure GC is completed after
      finalizers have run. We already call gc_rest() before invoking
      finalizers, but finalizer can allocate new objects and start new GC
      cycle, so we call gc_rest() again after finalizers are complete.
    * gc.c (rb_objspace_call_finalizer): control GC execution during
      force firnalizations at the end of interpreter process.
      [Bug #10768]
      1) Prohibit incremental GC while running Ruby-level finalizers
         to avoid any danger.
      2) Prohibit GC while invoking T_DATA/T_FILE data structure
         because these operations break object relations consistency.
      This patch can introduce another memory consuming issue because
      Ruby-level finalizers can run after (2), GC is disabled.
      However, basically object consistency was broken at (2) as I
      described above. So that running Ruby-level finalizers contains
      danger originally. Because of this point, I need to suggest to
      remove these 3 lines (invoking remaining finalizers). And add a
      rule to add that finalizers should not add new finalizers, or
      say there is no guarantee to invoke finalizers that added by
      another finalizer.

  Modified directories:
  Modified files:

More information about the ruby-cvs mailing list