From owner-freebsd-arch@FreeBSD.ORG Thu Jan 1 16:15:23 2004 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B0D7216A4CF for ; Thu, 1 Jan 2004 16:15:23 -0800 (PST) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7C89743D39; Thu, 1 Jan 2004 16:15:22 -0800 (PST) (envelope-from davidxu@freebsd.org) Received: from freebsd.org (davidxu@localhost [127.0.0.1]) i020FKFR003221; Thu, 1 Jan 2004 16:15:21 -0800 (PST) (envelope-from davidxu@freebsd.org) Message-ID: <3FF4BABA.5000601@freebsd.org> Date: Fri, 02 Jan 2004 08:26:34 +0800 From: David Xu User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.5) Gecko/20031208 Thunderbird/0.3 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Daniel Eischen References: In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit cc: arch@freebsd.org Subject: Re: sigaltstack with threads X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Jan 2004 00:15:23 -0000 Daniel Eischen wrote: > On Thu, 1 Jan 2004, David Xu wrote: > > >>Doug Rabson wrote: >> >>>I think that if its supported at all in threaded programs, it must be >>>per-thread state otherwise you can't prevent two different threads >>>colliding on the same signal stack. I can't quite see how this maps to >>>KSE/KSEG since I only have the most hazy model of that stuff in my head >>>right now. >>> >>>Anyway, I've worked around things by not setting SA_ONSTACK for the >>>handlers that I want to run on the thread stack. >>> >>> >> >>I have worked out a patch to support per-thread sigaltstack() state, >>in most cases, it is just a literally replacement. >> >>http://people.freebsd.org/~davidxu/kse/kern_sigaltstack.diffs > > > Looks good, but I have a question. You removed the proc lock > in kern_sig.c:osigstack() and kern_sig.c:kern_sigaltstack(). > What prevents a signal from being sent to the current thread > while it is mucking with the altsigstack? Is it possible for > an interrupt to swap out the current thread and have a signal > installed for it sometime later before it can complete > sigaltstack()? Or do signals only get installed on the way > out of the kernel? > signal stack only gets installed when thread is on the way out of kernel. Other threads only can post signal to the thread and may wake it up if it is sleeping, but cann't install a signal stack for the thread, the signaled thread checks signals when it is returning to userland, and installs signal stack for itself, sigaltstack is private for thread, and other threads needn't to know the signaled thread has an alternative signal stack at all. David Xu