Project

General

Profile

« Previous | Next » 

Revision db3cc675

Added by ko1 (Koichi Sasada) about 6 years ago

Fix Fiber with Thread issue on Windows [Bug #14642]

  • cont.c (rb_threadptr_root_fiber_setup): divide into two functions:

    • rb_threadptr_root_fiber_setup_by_parent(): called by the parent thread.
    • rb_threadptr_root_fiber_setup_by_child(): called by the created thread.

    rb_threadptr_root_fiber_setup() is called by the parent thread and
    set fib->fib_handle by ConvertThreadToFiber() on the parent thread on
    Windows enveironment.
    This means that root_fib->fib_handle of child thread is initialized
    with parent thread's Fiber handle. Furthermore, second call of
    ConvertThreadToFiber() for the same thread fails.

    This patch solves this weird situateion. However, maybe we can make more
    clean code.

  • thread.c (thread_start_func_2): call
    rb_threadptr_root_fiber_setup_by_child() at thread initialize routine.

  • vm.c (th_init): call rb_threadptr_root_fiber_setup_by_parent().

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