cvs commit: src/sys/sys proc.h src/sys/kern kern_thread.c

[ Available lists | Index of cvs-src | Month of Jun 2007 | Week of 12 Jun 2007 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
Jeff Roberson <jeff@FreeBSD.org>
Date
12 Jun 2007 07:24:47
Subject
cvs commit: src/sys/sys proc.h src/sys/kern kern_thread.c
Message-ID
200706120724.l5C7Olwd088327@repoman.freebsd.org


[ Hide this part ]
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


Elapsed time: 0.137 seconds