Races between close() and other operations on file channels
Alan Bateman
Alan.Bateman at Sun.COM
Mon Aug 6 14:34:10 UTC 2007
Florian Weimer wrote:
> What mechanisms prevent reuse of a file descriptor between the time it
> is extracted from a FileDescriptor object and the actual UNIX system
> call? If there is any locking, it's not very apparent from the source
> code.
>
There is a currently a problem in this area with file channels. Both
file channels and selectable channels are interruptible channels and so
must support asynchronous close. For the network oriented channels the
mechanism used is a two-step process. An asynchronous close first dups
the file descriptor in use by other threads to one used by the close
mechanism (this other file descriptor is connected to one end of a half
shutdown socket pair). As the threads "complete" I/O then the last one
releases the file descriptor. This mechanism has worked relatively well
but was not originally implemented for file channels. A few months back
I extended it to work with file channels but didn't get around to
integrating the changes (mostly because Windows lacks the APIs in this
area and the solution for that platform needed more testing). Are you
running into this problem?
-Alan.
More information about the core-libs-dev
mailing list