Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Jun 2007 07:24:47 +0000 (UTC)
From:      Jeff Roberson <jeff@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/sys proc.h src/sys/kern kern_thread.c
Message-ID:  <200706120724.l5C7Olwd088327@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
jeff        2007-06-12 07:24:47 UTC

  FreeBSD src repository

  Modified files:
    sys/sys              proc.h 
    sys/kern             kern_thread.c 
  Log:
  Solve a complex exit race introduced with thread_lock:
   - Add a count of exiting threads, p_exitthreads, to struct proc.
   - Increment p_exithreads when we set the deadthread in thread_exit().
   - When we thread_stash() a deadthread use an atomic to drop the count.
   - Spin until the p_exithreads count reaches 0 in thread_wait().
   - Lock the last exiting thread momentarily to be certain that it has
     exited cpu_throw().
   - Restructure thread_wait().  It does not need a loop as there will only
     ever be one thread.
  
  Tested by:      moose@opera.com
  Reported by:    kris, moose@opera.com
  
  Revision  Changes    Path
  1.249     +33 -15    src/sys/kern/kern_thread.c
  1.484     +1 -0      src/sys/sys/proc.h



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200706120724.l5C7Olwd088327>