svn commit: r218967 - head/sys/kern
Alexander Best
arundel at freebsd.org
Wed Feb 23 21:18:38 UTC 2011
On Thu Feb 24 11, Bruce Evans wrote:
> On Wed, 23 Feb 2011, Alexander Best wrote:
>
> >On Wed Feb 23 11, Kostik Belousov wrote:
> >>On Wed, Feb 23, 2011 at 12:56:25PM +0000, John Baldwin wrote:
> >>>...
> >>>Log:
> >>> Fix off-by-one error in check against max_threads_per_proc.
> >>>
> >>> Submitted by: arundel
> >>> MFC after: 1 week
> >>>
> >>>Modified:
> >>> head/sys/kern/kern_thr.c
> >>>
> >>>Modified: head/sys/kern/kern_thr.c
> >>>==============================================================================
> >>>--- head/sys/kern/kern_thr.c Wed Feb 23 10:28:37 2011 (r218966)
> >>>+++ head/sys/kern/kern_thr.c Wed Feb 23 12:56:25 2011 (r218967)
> >>>@@ -153,7 +153,7 @@ create_thread(struct thread *td, mcontex
> >>> p = td->td_proc;
> >>>
> >>> /* Have race condition but it is cheap. */
> >>>- if (p->p_numthreads >= max_threads_per_proc) {
> >>>+ if (p->p_numthreads > max_threads_per_proc) {
> >>> ++max_threads_hits;
> >>> return (EPROCLIM);
> >>> }
> >>
> >>I do not think there was off by one error. The create_thread() function
> >>is called to create new thread, and before the process thread counter
> >>is incremented in thread_link(). The old test tried to not allow more
> >>then max_threads_per_proc threads in a process, now it allows to
> >>create max_threads_per_proc.
>
> Actually, now it allows to create 1 more than max_threads_per_proc threads
> in a process.
>
> >doesn't the semantics of the term "maximum" imply that it's own value is
> >also
> >valid?
>
> Yes. Not 1 more.
the misconception on my side was that i thought a process had an initial thread
count of zero. however since a process itself counts as a single thread and has
a thread id, it's now obvious to me that with max_threads_per_proc=15000 a
process should only be allowed to spawn 14999 new threads.
thanks for clearing things up for the n3wb. ;)
cheers.
alex
>
> >if a sign says maximum weight 2000kg, does that mean that a weight of
> >2000kg is
> >invalid and the highest valid weight is 1999,999..kg?
>
> No. This means that if weights are always in units of kg, and are
> represented
> by indexes starting at index 0, then the highest valid index is 1999. But
> if the index is a count of the number of kg's, then the highest valud index
> is 2000.
>
> p->p_numthreads presumably matches its name, so it is a count of a number
> of threads and not a thread number.
>
> Bruce
--
a13x
More information about the svn-src-all
mailing list