git: kernel - Fix lwp_tid ranging error

Matthew Dillon dillon at crater.dragonflybsd.org
Mon Jul 1 17:16:55 PDT 2019


commit c2f052162d1e85f47aeae97e82f2e0bcc0227967
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Mon Jul 1 11:35:52 2019 -0700

    kernel - Fix lwp_tid ranging error
    
    * We intended for lwp_tid's to range from 1..INT_MAX, but we
      had the following code in the kernel and unfortunately GCC
      optimizes out the conditional entirely.
    
      if (++lp->lwp_tid <= 0)
    	lp->lwp_tid = 1;
    
    * In addition, the pthreads library actually would like to use
      a few high bits for flags, so fix the limit while we are
      here to 0x3FFFFFFF.  This saves us a pthreads assertion in
      the mutex code if an application is actually able to wind
      the thread id up this high over its life.  Since the TID
      allocation mechanism is pretty simplistic, it is entirely
      possible to do this given heavy thread creation / deletion
      rates and enough time.
    
    * Change the conditional such that GCC does not optimize it out.
      We do not want to depend on -fwrapv for the kernel code to
      compile properly, so we don't use it.
    
      if (lp->lwp_tid == 0 || lp->lwp_tid == 0x3FFFFFFF)
    	lp->lwp_tid = 1;
      else
    	++lp->lwp_tid;

Summary of changes:
 sys/kern/kern_fork.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/c2f052162d1e85f47aeae97e82f2e0bcc0227967


-- 
DragonFly BSD source repository


More information about the Commits mailing list