Skip to content
  • Koichi Sasada's avatar
    bf3b2a43
    relax Fiber#transfer's restriction · bf3b2a43
    Koichi Sasada authored
    Using Fiber#transfer with Fiber#resume for a same Fiber is
    limited (once Fiber#transfer is called for a fiber, the fiber
    can not be resumed more). This restriction was introduced to
    protect the resume/yield chain, but we realized that it is too much
    to protect the chain. Instead of the current restriction, we
    introduce some other protections.
    
    (1) can not transfer to the resuming fiber.
    (2) can not transfer to the yielding fiber.
    (3) can not resume transferred fiber.
    (4) can not yield from not-resumed fiber.
    
    [Bug #17221]
    
    Also at the end of a transferred fiber, it had continued on root fiber.
    However, if the root fiber resumed a fiber (and that fiber can resumed
    another fiber), this behavior also breaks the resume/yield chain.
    So at the end of a transferred fiber, switch to the edge of resume
    chain from root fiber.
    For example, root fiber resumed f1 and f1 resumed f2, transferred to
    f3 and f3 terminated, then continue from the fiber f2 (it was continued
    from root fiber without this patch).
    bf3b2a43
    relax Fiber#transfer's restriction
    Koichi Sasada authored
    Using Fiber#transfer with Fiber#resume for a same Fiber is
    limited (once Fiber#transfer is called for a fiber, the fiber
    can not be resumed more). This restriction was introduced to
    protect the resume/yield chain, but we realized that it is too much
    to protect the chain. Instead of the current restriction, we
    introduce some other protections.
    
    (1) can not transfer to the resuming fiber.
    (2) can not transfer to the yielding fiber.
    (3) can not resume transferred fiber.
    (4) can not yield from not-resumed fiber.
    
    [Bug #17221]
    
    Also at the end of a transferred fiber, it had continued on root fiber.
    However, if the root fiber resumed a fiber (and that fiber can resumed
    another fiber), this behavior also breaks the resume/yield chain.
    So at the end of a transferred fiber, switch to the edge of resume
    chain from root fiber.
    For example, root fiber resumed f1 and f1 resumed f2, transferred to
    f3 and f3 terminated, then continue from the fiber f2 (it was continued
    from root fiber without this patch).
Loading