diff options
| author | Mark Wielaard <mark@klomp.org> | 2005-07-31 16:00:40 +0000 |
|---|---|---|
| committer | Mark Wielaard <mark@klomp.org> | 2005-07-31 16:00:40 +0000 |
| commit | 06a4702effceb5ae97ea5c553f8b2eec10470bd7 (patch) | |
| tree | c055adf251a0f8ce3a85437b91ecc1a4af83fa60 /gnu/java/nio/FileLockImpl.java | |
| parent | 09a5fafa80ae30887ae91874f17fe660d1e2e259 (diff) | |
| download | classpath-06a4702effceb5ae97ea5c553f8b2eec10470bd7.tar.gz | |
* gnu/java/nio/FileLockImpl.java: Mark class final.
(ch): Removed field.
(valid): New field.
(FileLockImpl): Set valid to true.
(isValid): Test and set valid field.
(release): Release lock if it is still valid.
* java/nio/channels/FileLock.java: Mark all fields private final.
* native/jni/java-nio/gnu_java_nio_channels_FileChannelImpl.c
(Java_gnu_java_nio_channels_FileChannelImpl_lock): Translate
Long.MAX_VALUE to zero for fcntl.
(Java_gnu_java_nio_channels_FileChannelImpl_unlock): Likewise.
Diffstat (limited to 'gnu/java/nio/FileLockImpl.java')
| -rw-r--r-- | gnu/java/nio/FileLockImpl.java | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/gnu/java/nio/FileLockImpl.java b/gnu/java/nio/FileLockImpl.java index 245fa7340..673ca2522 100644 --- a/gnu/java/nio/FileLockImpl.java +++ b/gnu/java/nio/FileLockImpl.java @@ -1,5 +1,5 @@ -/* FileLockImpl.java -- - Copyright (C) 2002, 2004 Free Software Foundation, Inc. +/* FileLockImpl.java -- FileLock associated with a FileChannelImpl. + Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -44,20 +44,29 @@ import java.io.IOException; import java.nio.channels.FileLock; /** + * A FileLock associated with a FileChannelImpl. + * * @author Michael Koch * @since 1.4 */ -public class FileLockImpl extends FileLock +public final class FileLockImpl extends FileLock { - private FileChannelImpl ch; - + /** + * Whether or not this lock is valid, false when channel is closed or + * release has been explicitly called. + */ + private boolean valid; + public FileLockImpl (FileChannelImpl channel, long position, long size, boolean shared) { super (channel, position, size, shared); - ch = channel; + valid = true; } + /** + * Releases this lock. + */ protected void finalize() { try @@ -70,13 +79,26 @@ public class FileLockImpl extends FileLock } } - public boolean isValid () + /** + * Whether or not this lock is valid, false when channel is closed or + * release has been explicitly called. + */ + public boolean isValid() { - return channel().isOpen(); + if (valid) + valid = channel().isOpen(); + return valid; } - public synchronized void release () throws IOException + /** + * Releases the lock if it is still valid. Marks this lock as invalid. + */ + public void release() throws IOException { - ch.unlock(position(), size()); + if (isValid()) + { + valid = false; + ((FileChannelImpl) channel()).unlock(position(), size()); + } } } |
