I'm having trouble with my savannah account at present and so can't submit a
bug report.

Looking at some of the java.nio.channel classes I'm seeing incorrectly
synchronized code:

AbstractSelectableChannel: boolean blocking

This field is set under synchronization but isBlocking() reads it without
synchronization. Either isBlocking() needs to synchronize on the
blockingLock() object, or else blocking needs to be volatile


AbstractInterruptibleChannel: boolean closed

This is field is both set (close()) and read (isOpen()) without any
synchronization. At a minimum this field should be volatile.

Note that close() as it stands allows for implCloseChannel to be invoked
concurrently by more than one thread. Hence implCloseChannel will have to be
written to deal with that correctly.

gnu.java.nio.channels.FileChannelImpl

This class contains lots of methods of the form:

  if (!isOpen()) throw ClosedChannelException();
  // proceed with operation

but there seems to be no synchronization that prevents the channel from
being closed the moment after isOpen is checked. Am I to assume that all the
implXXX and other native methods have responsibility for dealing with this?
And for dealing with concurrent invocations?


There may be others but that was all I saw while browsing for other things.

Cheers,
David Holmes



_______________________________________________
Classpath mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/classpath

Reply via email to