Project

General

Profile

« Previous | Next » 

Revision 01cfae3b

Added by nagachika (Tomoyuki Chikanaga) over 6 years ago

merge revision(s) 59462,59474: [Backport #13772]

    release VM stack properly.

    * cont.c: r55766 change the handling method of Fiber's VM stack.
      Resumed Fiber points NULL as VM stack and running Thread has
      responsibility to manage it (marking and releasing).

      However, thread_start_func_2()@thread.c and thread_free()@vm.c
      doesn't free the VM stack if corresponding root Fiber is exist.
      This causes memory leak. [Bug #13772]

    * cont.c (root_fiber_alloc): fib->cont.saved_thread.ec.stack should be NULL
      because running thread has responsibility to manage this stack.

    * vm.c (rb_thread_recycle_stack_release): assert given stack is not NULL
      (callers should care it).

    fix stack storing for root fibers.

    * cont.c (root_fiber_alloc): this function is called by fiber_current()
      and fiber_store(). fiber_current() should clear VM stack information
      in a fiber data because runnning thread knows stack information and has
      responsibility to manage it. However fiber_store() requires to remain
      VM stack information in a fiber data because the responsibility to manage
      VM stack is moved to the Fiber from the Thread (and switch to another
      fiber).

    * cont.c (root_fiber_alloc): save thread's fiber and root_fiber information.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@59516 b2dd03c8-39d4-4d8f-98ff-823fe69b080e