From cc1b3d6b642d0baf424a9fca1ad7d94e1f342b02 Mon Sep 17 00:00:00 2001 From: Michael Koch Date: Wed, 14 May 2003 06:37:59 +0000 Subject: 2003-05-14 Michael Koch * gnu/java/nio/FileLockImpl.java (released): New member variable. (FileLockImpl): Initialize released. (releaseImpl): New native method. (release): Implemented. * gnu/java/nio/SelectorImpl.java: Reformatted. * gnu/java/nio/SelectionKeyImpl.java: Reformatted. * gnu/java/nio/ServerSocketChannelImpl.java: Reformatted. (accept): Throws IOException. * gnu/java/nio/SocketChannelImpl.java: Reformatted. (implConfigureBlocking): Throws IOException. (connect): Likewise. (read): Likewise. (write): Likewise. * gnu/java/nio/natFileLockImpl.cc: New file. * java/nio/channels/FileLock.java: Reformatted. * Makefile.am: (ordinary_java_source_files): Added gnu/java/nio/FileLockImpl.java. (nat_source_files): Added gnu/java/nio/natFileLockImpl.cc. * Makefile.in: Regenerated. From-SVN: r66799 --- libjava/gnu/java/nio/FileLockImpl.java | 22 +++++++-- libjava/gnu/java/nio/SelectionKeyImpl.java | 2 +- libjava/gnu/java/nio/SelectorImpl.java | 10 ++-- libjava/gnu/java/nio/ServerSocketChannelImpl.java | 12 ++--- libjava/gnu/java/nio/SocketChannelImpl.java | 60 ++++++++++++----------- libjava/gnu/java/nio/natFileLockImpl.cc | 25 ++++++++++ 6 files changed, 85 insertions(+), 46 deletions(-) create mode 100644 libjava/gnu/java/nio/natFileLockImpl.cc (limited to 'libjava/gnu') diff --git a/libjava/gnu/java/nio/FileLockImpl.java b/libjava/gnu/java/nio/FileLockImpl.java index 2e55f6b..088e552 100644 --- a/libjava/gnu/java/nio/FileLockImpl.java +++ b/libjava/gnu/java/nio/FileLockImpl.java @@ -35,29 +35,41 @@ this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ + package gnu.java.nio; +import java.io.FileDescriptor; +import java.io.IOException; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; /** * @author Michael Koch + * @since 1.4 */ public class FileLockImpl extends FileLock { - public FileLockImpl (FileChannel channel, long position, long size, - boolean shared) + private FileDescriptor fd; + private boolean released; + + public FileLockImpl (FileDescriptor fd, FileChannel channel, long position, + long size, boolean shared) { super (channel, position, size, shared); + this.fd = fd; + this.released = false; } public boolean isValid () { - throw new Error ("Not implemented"); + return (released || !channel.isOpen ()); } - public void release () + private native void releaseImpl () throws IOException; + + public synchronized void release () throws IOException { - throw new Error ("Not implemented"); + releaseImpl (); + released = true; } } diff --git a/libjava/gnu/java/nio/SelectionKeyImpl.java b/libjava/gnu/java/nio/SelectionKeyImpl.java index 5763d68..72dc20b 100644 --- a/libjava/gnu/java/nio/SelectionKeyImpl.java +++ b/libjava/gnu/java/nio/SelectionKeyImpl.java @@ -50,7 +50,7 @@ public class SelectionKeyImpl extends AbstractSelectionKey SelectorImpl impl; SelectableChannel ch; - public SelectionKeyImpl(SelectableChannel ch, SelectorImpl impl, int fd) + public SelectionKeyImpl (SelectableChannel ch, SelectorImpl impl, int fd) { this.ch = ch; this.impl = impl; diff --git a/libjava/gnu/java/nio/SelectorImpl.java b/libjava/gnu/java/nio/SelectorImpl.java index 0b513f9..e3eed25 100644 --- a/libjava/gnu/java/nio/SelectorImpl.java +++ b/libjava/gnu/java/nio/SelectorImpl.java @@ -261,16 +261,16 @@ public class SelectorImpl extends AbstractSelector // return impl; // } // else - + if (ch instanceof SocketChannelImpl) - { + { SocketChannelImpl sc = (SocketChannelImpl) ch; SelectionKeyImpl impl = new SelectionKeyImpl (ch, this, sc.fd); add (impl); impl.interestOps (ops); impl.attach (att); return impl; - } + } else if (ch instanceof DatagramChannelImpl) { DatagramChannelImpl dc = (DatagramChannelImpl) ch; @@ -290,9 +290,9 @@ public class SelectorImpl extends AbstractSelector return impl; } else - { + { System.err.println ("INTERNAL ERROR, no known channel type"); - } + } return null; } diff --git a/libjava/gnu/java/nio/ServerSocketChannelImpl.java b/libjava/gnu/java/nio/ServerSocketChannelImpl.java index 039b503..0b3fc66 100644 --- a/libjava/gnu/java/nio/ServerSocketChannelImpl.java +++ b/libjava/gnu/java/nio/ServerSocketChannelImpl.java @@ -73,15 +73,15 @@ class ServerSocketChannelImpl extends ServerSocketChannel public void finalizer() { if (connected) - { + { try { - close(); + close (); } catch (Exception e) { } - } + } } protected void implCloseSelectableChannel () throws IOException @@ -91,12 +91,12 @@ class ServerSocketChannelImpl extends ServerSocketChannel fd = SocketChannelImpl.SocketCreate (); } - protected void implConfigureBlocking (boolean block) throws IOException + protected void implConfigureBlocking (boolean blocking) throws IOException { - blocking = block; + this.blocking = blocking; } - public SocketChannel accept () + public SocketChannel accept () throws IOException { SocketChannelImpl result = new SocketChannelImpl (provider ()); result.sa = new InetSocketAddress (0); diff --git a/libjava/gnu/java/nio/SocketChannelImpl.java b/libjava/gnu/java/nio/SocketChannelImpl.java index 9f2de27..65ca623 100644 --- a/libjava/gnu/java/nio/SocketChannelImpl.java +++ b/libjava/gnu/java/nio/SocketChannelImpl.java @@ -80,37 +80,36 @@ public class SocketChannelImpl extends SocketChannel public void finalizer() { if (connected) - { + { try { - close(); + close (); } catch (Exception e) { } - } + } } - protected void implCloseSelectableChannel() + protected void implCloseSelectableChannel () throws IOException { connected = false; SocketClose(fd); fd = SocketCreate(); } - protected void implConfigureBlocking(boolean block) + protected void implConfigureBlocking (boolean blocking) throws IOException { - if (blocking == block) - return; + if (this.blocking == blocking) + return; } - public boolean connect(SocketAddress remote) - throws IOException + public boolean connect (SocketAddress remote) throws IOException { if (connected) - { - throw new AlreadyConnectedException(); - } + { + throw new AlreadyConnectedException (); + } // ok, lets connect ! @@ -130,17 +129,17 @@ public class SocketChannelImpl extends SocketChannel return blocking; } - public boolean finishConnect() + public boolean finishConnect () { return false; } - public boolean isConnected() + public boolean isConnected () { return connected; } - public boolean isConnectionPending() + public boolean isConnectionPending () { if (blocking) return true; @@ -148,7 +147,7 @@ public class SocketChannelImpl extends SocketChannel return false; } - public Socket socket() + public Socket socket () { if (sock_object != null) { @@ -158,7 +157,7 @@ public class SocketChannelImpl extends SocketChannel return sock_object; } - public int read(ByteBuffer dst) + public int read (ByteBuffer dst) throws IOException { int bytes = 0; int len = 1024; @@ -168,27 +167,29 @@ public class SocketChannelImpl extends SocketChannel dst.put(b, 0, bytes); if (bytes == 0) - { + { // we've hit eof ? return -1; - } + } return bytes; } - public long read(ByteBuffer[] dsts, int offset, int length) + public long read (ByteBuffer[] dsts, int offset, int length) + throws IOException { long bytes = 0; - for (int i=offset; i + +#include +#include + +#include +#include +#include + +void +gnu::java::nio::FileLockImpl::releaseImpl () +{ + throw new ::java::io::IOException + (JvNewStringUTF ("releaseImpl not implemented")); +} -- cgit v1.1