1. 23 2月, 2014 2 次提交
  2. 24 5月, 2012 1 次提交
    • 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
  3. 15 6月, 2011 1 次提交
  4. 14 6月, 2011 1 次提交
  5. 18 4月, 2011 3 次提交
    • R
      fix typo in x86_64 cancellable syscall asm · 1bc44a47
      Rich Felker 提交于
      1bc44a47
    • R
      fix bugs in cancellable syscall asm · 09dae2b7
      Rich Felker 提交于
      x86_64 was just plain wrong in the cancel-flag-already-set path, and
      crashing.
      
      the more subtle error was not clearing the saved stack pointer before
      returning to c code. this could result in the signal handler
      misidentifying c code as the pre-syscall part of the asm, and acting
      on cancellation at the wrong time, and thus resource leak race
      conditions.
      
      also, now __cancel (in the c code) is responsible for clearing the
      saved sp in the already-cancelled branch. this means we have to use
      call rather than jmp to ensure the stack pointer in the c will never
      match what the asm saved.
      09dae2b7
    • R
      fix some minor issues in cancellation handling patch · e7466401
      Rich Felker 提交于
      signals were wrongly left masked, and cancellability state was not
      switched to disabled, during the execution of cleanup handlers.
      e7466401
  6. 17 4月, 2011 1 次提交
    • R
      overhaul pthread cancellation · feee9890
      Rich Felker 提交于
      this patch improves the correctness, simplicity, and size of
      cancellation-related code. modulo any small errors, it should now be
      completely conformant, safe, and resource-leak free.
      
      the notion of entering and exiting cancellation-point context has been
      completely eliminated and replaced with alternative syscall assembly
      code for cancellable syscalls. the assembly is responsible for setting
      up execution context information (stack pointer and address of the
      syscall instruction) which the cancellation signal handler can use to
      determine whether the interrupted code was in a cancellable state.
      
      these changes eliminate race conditions in the previous generation of
      cancellation handling code (whereby a cancellation request received
      just prior to the syscall would not be processed, leaving the syscall
      to block, potentially indefinitely), and remedy an issue where
      non-cancellable syscalls made from signal handlers became cancellable
      if the signal handler interrupted a cancellation point.
      
      x86_64 asm is untested and may need a second try to get it right.
      feee9890