• R
    fix issue with longjmp out of signal handlers and cancellation · 4da268f7
    Rich Felker 提交于
    stale state information indicating that a thread was possibly blocked
    at a cancellation point could get left behind if longjmp was used to
    exit a signal handler that interrupted a cancellation point.
    
    to fix the issue, we throw away the state information entirely and
    simply compare the saved instruction pointer to a range of code
    addresses in the __syscall_cp_asm function. all the ugly PIC work
    (which becomes minimal anyway with this approach) is defered to
    cancellation time instead of happening at every syscall, which should
    improve performance too.
    
    this commit also fixes cancellation on arm, which was mildly broken
    (race condition, not checking cancellation flag once inside the
    cancellation point zone). apparently i forgot to implement that. the
    new arm code is untested, but appears correct; i'll test and fix it
    later if there are problems.
    4da268f7
syscall_cp.s 345 字节