Date: Thu, 21 Dec 2006 15:22:16 +0000 (GMT) From: Robert Watson <rwatson@FreeBSD.org> To: Julian Elischer <jelischer@ironport.com> Cc: Daniel Eischen <deischen@freebsd.org>, David Xu <davidxu@freebsd.org>, freebsd-arch@freebsd.org Subject: Re: close() of active socket does not work on FreeBSD 6 Message-ID: <20061221152115.U83974@fledge.watson.org> In-Reply-To: <4589E7D2.9010608@ironport.com> References: <32874.1165905843@critter.freebsd.dk> <20061220153126.G85384@fledge.watson.org> <Pine.GSO.4.64.0612201308220.23942@sea.ntplx.net> <200612210820.09955.davidxu@freebsd.org> <4589E7D2.9010608@ironport.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20061221152115.U83974>