Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Feb 2011 21:18:38 +0000
From:      Alexander Best <arundel@freebsd.org>
To:        Bruce Evans <brde@optusnet.com.au>
Cc:        Kostik Belousov <kostikbel@gmail.com>, svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, John Baldwin <jhb@freebsd.org>
Subject:   Re: svn commit: r218967 - head/sys/kern
Message-ID:  <20110223211838.GA27997@freebsd.org>
In-Reply-To: <20110224060300.S1008@besplex.bde.org>
References:  <201102231256.p1NCuPHN056220@svn.freebsd.org> <20110223131228.GN78089@deviant.kiev.zoral.com.ua> <20110223135734.GA62693@freebsd.org> <20110224060300.S1008@besplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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



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