From owner-svn-src-head@FreeBSD.ORG Wed Feb 23 19:14:40 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F12E2106566C; Wed, 23 Feb 2011 19:14:39 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail01.syd.optusnet.com.au (mail01.syd.optusnet.com.au [211.29.132.182]) by mx1.freebsd.org (Postfix) with ESMTP id 8AC1F8FC17; Wed, 23 Feb 2011 19:14:39 +0000 (UTC) Received: from c122-107-114-89.carlnfd1.nsw.optusnet.com.au (c122-107-114-89.carlnfd1.nsw.optusnet.com.au [122.107.114.89]) by mail01.syd.optusnet.com.au (8.13.1/8.13.1) with ESMTP id p1NJEap2006958 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 24 Feb 2011 06:14:37 +1100 Date: Thu, 24 Feb 2011 06:14:36 +1100 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Alexander Best In-Reply-To: <20110223135734.GA62693@freebsd.org> Message-ID: <20110224060300.S1008@besplex.bde.org> References: <201102231256.p1NCuPHN056220@svn.freebsd.org> <20110223131228.GN78089@deviant.kiev.zoral.com.ua> <20110223135734.GA62693@freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: Kostik Belousov , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, John Baldwin Subject: Re: svn commit: r218967 - head/sys/kern X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Feb 2011 19:14:40 -0000 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. > 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