From owner-freebsd-current@FreeBSD.ORG Tue Jan 24 04:32:30 2006 Return-Path: X-Original-To: freebsd-current@freebsd.org Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AB71116A41F for ; Tue, 24 Jan 2006 04:32:30 +0000 (GMT) (envelope-from deischen@freebsd.org) Received: from mail.ntplx.net (mail.ntplx.net [204.213.176.10]) by mx1.FreeBSD.org (Postfix) with ESMTP id 4E2DA43D45 for ; Tue, 24 Jan 2006 04:32:30 +0000 (GMT) (envelope-from deischen@freebsd.org) Received: from sea.ntplx.net (sea.ntplx.net [204.213.176.11]) by mail.ntplx.net (8.13.5/8.13.5/NETPLEX) with ESMTP id k0O4WSY9004097; Mon, 23 Jan 2006 23:32:29 -0500 (EST) Date: Mon, 23 Jan 2006 23:32:28 -0500 (EST) From: Daniel Eischen X-X-Sender: eischen@sea.ntplx.net To: Peter Jeremy In-Reply-To: <20060124020137.GW25397@cirb503493.alcatel.com.au> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by AMaViS and Clam AntiVirus (mail.ntplx.net) Cc: freebsd-current@freebsd.org Subject: Re: kernel thread as real threads.. X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Daniel Eischen List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Jan 2006 04:32:30 -0000 On Tue, 24 Jan 2006, Peter Jeremy wrote: > On Mon, 2006-Jan-23 20:38:46 -0500, Daniel Eischen wrote: > >On Tue, 24 Jan 2006, Peter Jeremy wrote: > > > >> On Mon, 2006-Jan-23 19:59:02 -0500, Daniel Eischen wrote: > >> >POSIX specifies that only 1 thread (the forking thread) is present > >> >after a fork. > >> > >> Just to clarify, I presume you are talking about only one thread > >> existing in the child process and the parent's threads still exist as > >> they did before the fork(). If fork() arbitrarily killed all the > >> threads in the parent process, that would be a real PITA. > > > >Correct, I assumed we were talking about the child process. > > My understanding of Robert's issue was the case where a parent has > multiple threads, one thread does a fork() whilst the remaining > threads are not blocked. If the remaining threads are executing > whilst fork() is copying the process address space, then the child > will could inherit a confused (partially indeterminate) copy of the > parent's address space, depending on what the other threads have > been doing. I think that's OK. The only thing that is guaranteed safe (in the child) after a fork from a multi-threaded process are the async-signal-safe functions. If a process has aio active, it shouldn't assume anything about the childs state after a fork. I think it's only important that the forking thread continues on normally in the child. OTOH, if there is a possibility of some inconsistent kernel state that will affect the child if it calls any of the async-signal-safe functions or one of the exec() functions, that should be avoided. -- DE