From owner-cvs-all@FreeBSD.ORG Thu Feb 16 00:02:11 2006 Return-Path: X-Original-To: cvs-all@freebsd.org Delivered-To: cvs-all@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 673B216A422; Thu, 16 Feb 2006 00:02:11 +0000 (GMT) (envelope-from davidxu@freebsd.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9A7DE43D46; Thu, 16 Feb 2006 00:02:10 +0000 (GMT) (envelope-from davidxu@freebsd.org) Received: from [127.0.0.1] (root@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k1G027eS082338; Thu, 16 Feb 2006 00:02:08 GMT (envelope-from davidxu@freebsd.org) Message-ID: <43F3C0FF.7020002@freebsd.org> Date: Thu, 16 Feb 2006 08:02:07 +0800 From: David Xu User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.12) Gecko/20060107 X-Accept-Language: en-us, en MIME-Version: 1.0 To: David Xu References: <200602152352.k1FNq1KU056133@repoman.freebsd.org> In-Reply-To: <200602152352.k1FNq1KU056133@repoman.freebsd.org> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Cc: cvs-src@freebsd.org, src-committers@freebsd.org, cvs-all@freebsd.org Subject: Re: cvs commit: src/sys/sys proc.h sleepqueue.h src/sys/kern kern_condvar.c kern_kse.c kern_sig.c kern_synch.c kern_thread.c subr_sleepqueue.c X-BeenThere: cvs-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: CVS commit messages for the entire tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Feb 2006 00:02:11 -0000 David Xu wrote: >davidxu 2006-02-15 23:52:01 UTC > > FreeBSD src repository > > Modified files: > sys/sys proc.h sleepqueue.h > sys/kern kern_condvar.c kern_kse.c kern_sig.c > kern_synch.c kern_thread.c > subr_sleepqueue.c > Log: > Fix a long standing race between sleep queue and thread > suspension code. When a thread A is going to sleep, it calls > sleepq_catch_signals() to detect any pending signals or thread > suspension request, if nothing happens, it returns without > holding process lock or scheduler lock, this opens a race > window which allows thread B to come in and do process > suspension work, however since A is still at running state, > thread B can do nothing to A, thread A continues, and puts > itself into actually sleeping state, but B has never seen it, > and it sits there forever until B is woken up by other threads > > Should be "until thread A is woken up ... ", sigh!