From owner-freebsd-arch@FreeBSD.ORG Thu Dec 21 15:22:17 2006 Return-Path: X-Original-To: freebsd-arch@freebsd.org Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8E92716A412; Thu, 21 Dec 2006 15:22:17 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from cyrus.watson.org (cyrus.watson.org [209.31.154.42]) by mx1.freebsd.org (Postfix) with ESMTP id 4E78913C44B; Thu, 21 Dec 2006 15:22:17 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from fledge.watson.org (fledge.watson.org [209.31.154.41]) by cyrus.watson.org (Postfix) with ESMTP id A4B8B46FC2; Thu, 21 Dec 2006 10:22:16 -0500 (EST) Date: Thu, 21 Dec 2006 15:22:16 +0000 (GMT) From: Robert Watson X-X-Sender: robert@fledge.watson.org To: Julian Elischer In-Reply-To: <4589E7D2.9010608@ironport.com> Message-ID: <20061221152115.U83974@fledge.watson.org> References: <32874.1165905843@critter.freebsd.dk> <20061220153126.G85384@fledge.watson.org> <200612210820.09955.davidxu@freebsd.org> <4589E7D2.9010608@ironport.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: Daniel Eischen , David Xu , freebsd-arch@freebsd.org Subject: Re: close() of active socket does not work on FreeBSD 6 X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Dec 2006 15:22:17 -0000 On Wed, 20 Dec 2006, Julian Elischer wrote: >> I think the main concern is if we will record every thread using a fd, that >> means, when you call read() on a fd, you record your thread pointer into >> the fd's thread list, when one wants to close the fd, it has to notify all >> the threads in the list, set a flag for each thread, the flag indicates a >> thread is interrupted because the fd was closed, when the thread returns >> from deep code path to read() syscall, it should check the flag, and return >> EBADF to user if it was set. whatever, a reserved signal or TDF_INTERRUPT >> may interrupt a thread. but since there are many file operations, I don't >> know if we are willing to pay such overheads to every file syscall, extra >> locking is not welcomed. > > I think you are only intersted in treads that are sleeping.. so you allow a > sleeping thread to save a pointer to the fd (or whatever) on which it is > sleeping, along with the sleep address. > > items that are not sleeping are either already returning, or are going to > sleep, in which case they can check at that time. Hence my question about select and poll: should they throw an exception state when a file descriptor is closed out from under them? They often sleep on hundreds or thousands of file descriptors, and not just one. Robert N M Watson Computer Laboratory University of Cambridge