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
[EMAIL PROTECTED]


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to