[ruby-cvs:71153] normal:r64062 (trunk): cont.c (ec_switch): prevent delayed/missed trap interrupt race

normal at ruby-lang.org normal at ruby-lang.org
Thu Jul 26 17:30:11 JST 2018


normal	2018-07-26 17:30:10 +0900 (Thu, 26 Jul 2018)

  New Revision: 64062

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=64062

  Log:
    cont.c (ec_switch): prevent delayed/missed trap interrupt race
    
    timer-thread may set trap interrupt with rb_threadptr_check_signal
    at any time independent of GVL.  This means timer-thread may set
    the trap interrupt flag on the previous execution context; causing
    the flag to be unnoticed until a future ec switch (or lost
    completely if the ec is done).
    
    Note: I avoid relying on th->interrupt_lock here and use
    atomics because we won't be able to rely on it for proposed lazy
    timer-thread [Misc #14937].
    
    This regression affects Ruby 2.5 as it was introduced by moving
    interrupt_flag to `ec' which is an unstable pointer.  Ruby <= 2.4
    was unaffected because vm->main_thread->interrupt_flag never
    changed.
    
    [ruby-core:88119] [Bug #14939]

  Modified files:
    trunk/cont.c


More information about the ruby-cvs mailing list