From owner-freebsd-threads@FreeBSD.ORG Sun Apr 6 08:05:28 2003 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8D58937B404; Sun, 6 Apr 2003 08:05:28 -0700 (PDT) Received: from mail.pcnet.com (mail.pcnet.com [204.213.232.4]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2F38E43FDD; Sun, 6 Apr 2003 08:05:27 -0700 (PDT) (envelope-from eischen@pcnet1.pcnet.com) Received: from pcnet1.pcnet.com (localhost [127.0.0.1]) by mail.pcnet.com (8.12.8/8.12.1) with ESMTP id h36F5QBg019030; Sun, 6 Apr 2003 11:05:26 -0400 (EDT) Received: from localhost (eischen@localhost)h36F5Pd5019027; Sun, 6 Apr 2003 11:05:26 -0400 (EDT) Date: Sun, 6 Apr 2003 11:05:25 -0400 (EDT) From: Daniel Eischen To: David Xu In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII cc: freebsd-threads@freebsd.org Subject: Re: PS_BLOCKED X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 06 Apr 2003 15:05:28 -0000 On Sun, 6 Apr 2003, Daniel Eischen wrote: > On Sun, 6 Apr 2003, David Xu wrote: > > > > ----- Original Message ----- > > From: "Daniel Eischen" > > To: "DavidXu" > > Cc: > > Sent: Sunday, April 06, 2003 2:40 PM > > Subject: Re: PS_BLOCKED > > > > > I've still got one bug I am trying to hunt down with > > > signals -- the sigwait test fails. Process (kill) signals > > > don't seem to wakeup threads in sigwait(). I'm not sure > > > if it is a kernel bug or not, but I suspect it's > > > something I'm doing. > > > > > > > I don't know if Jeff's signal change in kernel affects your code, > > but signals lost problem is still not fixed, a thread exports its > > context and exits would lost signals dispatched to it, even the > > signals is not for the thread, but for process. > > I'll do some more debugging today and see if it is in the > UTS or the kernel. I think there is a problem in the kernel; probably Jeff's changes that broke it. When the UTS gets a signal (in k_mbx.km_sigscaught), the signal mask in the kernel is never cleared. The UTS only ever gets one signal. If I use __sys_sigprocmask() to clear the kernel signal mask after the UTS receives the signal(s), then everything works and the sigwait test passes. I'm not sure what we should do. The UTS is currently installing signal handlers with all signals masked (act.sa_mask). We could clear this mask and perhaps solve the problem that way. But when there are multiple (kernel) threads each with its own mask and Jeff's recent changes, there are other problems I think. -- Dan Eischen