1. 16 10月, 2015 1 次提交
    • B
      add missing memory barrier to pthread_join · 53cd8c5a
      Bobby Bingham 提交于
      POSIX requires pthread_join to synchronize memory on success.  The
      futex wait inside __timedwait_cp cannot handle this because it's not
      called in all cases.  Also, in the case of a spurious wake, tid can
      become zero between the wake and when the joining thread checks it.
      53cd8c5a
  2. 03 3月, 2015 3 次提交
    • R
      suppress masked cancellation in pthread_join · eb4bd8d8
      Rich Felker 提交于
      like close, pthread_join is a resource-deallocation function which is
      also a cancellation point. the intent of masked cancellation mode is
      to exempt such functions from failure with ECANCELED.
      eb4bd8d8
    • R
      fix namespace issue in pthread_join affecting thrd_join · a3de8f7f
      Rich Felker 提交于
      pthread_testcancel is not in the ISO C reserved namespace and thus
      cannot be used here. use the namespace-protected version of the
      function instead.
      a3de8f7f
    • R
      factor cancellation cleanup push/pop out of futex __timedwait function · 0fc317d8
      Rich Felker 提交于
      previously, the __timedwait function was optionally a cancellation
      point depending on whether it was passed a pointer to a cleaup
      function and context to register. as of now, only one caller actually
      used such a cleanup function (and it may face removal soon); most
      callers either passed a null pointer to disable cancellation or a
      dummy cleanup function.
      
      now, __timedwait is never a cancellation point, and __timedwait_cp is
      the cancellable version. this makes the intent of the calling code
      more obvious and avoids ugly dummy functions and long argument lists.
      0fc317d8
  3. 07 9月, 2014 1 次提交
    • J
      use weak symbols for the POSIX functions that will be used by C threads · df7d0dfb
      Jens Gustedt 提交于
      The intent of this is to avoid name space pollution of the C threads
      implementation.
      
      This has two sides to it. First we have to provide symbols that wouldn't
      pollute the name space for the C threads implementation. Second we have
      to clean up some internal uses of POSIX functions such that they don't
      implicitly drag in such symbols.
      df7d0dfb
  4. 05 9月, 2014 1 次提交
  5. 09 11月, 2012 1 次提交
    • R
      clean up sloppy nested inclusion from pthread_impl.h · efd4d87a
      Rich Felker 提交于
      this mirrors the stdio_impl.h cleanup. one header which is not
      strictly needed, errno.h, is left in pthread_impl.h, because since
      pthread functions return their error codes rather than using errno,
      nearly every single pthread function needs the errno constants.
      
      in a few places, rather than bringing in string.h to use memset, the
      memset was replaced by direct assignment. this seems to generate much
      better code anyway, and makes many functions which were previously
      non-leaf functions into leaf functions (possibly eliminating a great
      deal of bloat on some platforms where non-leaf functions require ugly
      prologue and/or epilogue).
      efd4d87a
  6. 12 9月, 2011 1 次提交
    • R
      fix serious bug in pthread_join · 8fe5fa56
      Rich Felker 提交于
      on spurious wakeups/returns from __timedwait, pthread_join would
      "succeed" and unmap the thread's stack while it was still running. at
      best this would lead to SIGSEGV when the thread resumed execution, but
      in the worst case, the thread would later resume executing on top of
      another new thread's stack mapped at the same address.
      
      spent about 4 hours tracking this bug down, chasing rare
      difficult-to-reproduce stack corruption in a stress test program.
      still no idea *what* caused the spurious wakeups; i suspect it's a
      kernel bug.
      8fe5fa56
  7. 10 9月, 2011 1 次提交
    • R
      fix pthread_join wait call: thread termination tid futex is not private · eb351a9e
      Rich Felker 提交于
      this seeme to be the bug that prevented enabling of private futex
      support. i'm going to hold off on switching to private futexes until
      after the next release, and until i get a chance to audit all
      wait/wake calls to make sure they're using the correct private
      argument, but with this change it should be safe to enable private
      futex support.
      eb351a9e
  8. 03 8月, 2011 1 次提交
    • R
      unify and overhaul timed futex waits · ec381af9
      Rich Felker 提交于
      new features:
      
      - FUTEX_WAIT_BITSET op will be used for timed waits if available. this
        saves a call to clock_gettime.
      
      - error checking for the timespec struct is now inside __timedwait so
        it doesn't need to be duplicated everywhere. cond_timedwait still
        needs to duplicate it to avoid unlocking the mutex, though.
      
      - pushing and popping the cancellation handler is delegated to
        __timedwait, and cancellable/non-cancellable waits are unified.
      ec381af9
  9. 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
  10. 12 2月, 2011 1 次提交