From owner-freebsd-threads@FreeBSD.ORG Mon Feb 13 09:20:13 2006 Return-Path: X-Original-To: freebsd-threads@hub.freebsd.org Delivered-To: freebsd-threads@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id CA85016A423 for ; Mon, 13 Feb 2006 09:20:13 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 46C2743D7C for ; Mon, 13 Feb 2006 09:20:07 +0000 (GMT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id k1D9K6aq056467 for ; Mon, 13 Feb 2006 09:20:06 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id k1D9K663056466; Mon, 13 Feb 2006 09:20:06 GMT (envelope-from gnats) Date: Mon, 13 Feb 2006 09:20:06 GMT Message-Id: <200602130920.k1D9K663056466@freefall.freebsd.org> To: freebsd-threads@FreeBSD.org From: David Xu Cc: Subject: Re: threads/89262: [kernel] [patch] multi-threaded process hangs in kernel in fork() X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: David Xu List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Feb 2006 09:20:13 -0000 The following reply was made to PR threads/89262; it has been noted by GNATS. From: David Xu To: bug-followup@freebsd.org, garry@NetworkPhysics.COM Cc: jhb@freebsd.org Subject: Re: threads/89262: [kernel] [patch] multi-threaded process hangs in kernel in fork() Date: Mon, 13 Feb 2006 17:11:26 +0800 ast will call userret which in turn will call thread_suspend_check. so the bug may not be here, but in other code. I have found a race between sleep queue and thread suspension code, the following patch fixed the bug, it also simplified interaction between sleep queue and signal code. now, sleepq_abort() is also fixed, it can save an errno, unlike current code, it wrongly works as wakeup(). http://people.freebsd.org/~davidxu/patch/slpq_susp4.patch David Xu