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