Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Mar 2000 11:14:48 -0500 (EST)
From:      Daniel Eischen <eischen@vigrid.com>
To:        eischen@vigrid.com, tboxberg@schuett-elektronik.de
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: Pthread blocking I/O
Message-ID:  <200003061614.LAA02543@pcnet1.pcnet.com>

next in thread | raw e-mail | index | archive | help

Titus von Boxberg wrote:
> Daniel Eischen wrote:
> > 
> > > Apparently it is not possible to shutdown those
> > > threads from a third thread, neither using close nor shutdown(2) for
> > > the socket I/O if the threads are blocked during read.
> > >
> > > What methods can one use to unblock such a blocked-on-read
> > > thread?
> > 
> > The current implementation of FreeBSD pthreads only grants access
> > to file descriptors to one thread at a time.  I think if one thread
>
> and per direction (?)

Yes, per direction.  I think a close() will try to lock the
file descriptor for both read and write though.

> > tries to close a file descriptor from which another thread is
> > reading, that the thread trying to close will block until the
> > read completes.
> Thanks for your answer!
> 
> What's the reason for locking the file descriptors
> for *all* system calls? especially those I mentioned?

I dunno.  That's the way it was implemented when I started
working on the threads library.  I suppose to protect poorly
written programs from themselves?  I haven't found anything
in the POSIX spec that directly addresses this issue, but I
haven't spent the time to thoroughly read the spec either.
You certainly want to make accesses/modifications to FILE
types atomic/protected, but I think it's the applications
responsibilty to synchronize access to file descriptors for
I/O.  As in your example, I think you should allow one thread
to close a file descriptor while another thread is reading
from it.

Dan Eischen
eischen@vigrid.com


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200003061614.LAA02543>