Skip to content
  • Koichi Sasada's avatar
    36da0b3d
    check interrupts at each frame pop timing. · 36da0b3d
    Koichi Sasada authored
    Asynchronous events such as signal trap, finalization timing,
    thread switching and so on are managed by "interrupt_flag".
    Ruby's threads check this flag periodically and if a thread
    does not check this flag, above events doesn't happen.
    
    This checking is CHECK_INTS() (related) macro and it is placed
    at some places (laeve instruction and so on). However, at the end
    of C methods, C blocks (IMEMO_IFUNC) etc there are no checking
    and it can introduce uninterruptible thread.
    
    To modify this situation, we decide to place CHECK_INTS() at
    vm_pop_frame(). It increases interrupt checking points.
    [Bug #16366]
    
    This patch can introduce unexpected events...
    36da0b3d
    check interrupts at each frame pop timing.
    Koichi Sasada authored
    Asynchronous events such as signal trap, finalization timing,
    thread switching and so on are managed by "interrupt_flag".
    Ruby's threads check this flag periodically and if a thread
    does not check this flag, above events doesn't happen.
    
    This checking is CHECK_INTS() (related) macro and it is placed
    at some places (laeve instruction and so on). However, at the end
    of C methods, C blocks (IMEMO_IFUNC) etc there are no checking
    and it can introduce uninterruptible thread.
    
    To modify this situation, we decide to place CHECK_INTS() at
    vm_pop_frame(). It increases interrupt checking points.
    [Bug #16366]
    
    This patch can introduce unexpected events...
Loading