The file lock implementation on some JVM/OS combinations is broken. See:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4883030
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4854085 

If -Djava.nio.channels.FileLock.broken=true is now passed as an argument to the JVM, the actveio journal will avoid using that file locking APIs.

git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@393039 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Hiram R. Chirino 2006-04-10 20:03:46 +00:00
parent c852f0755b
commit 78e79614e5
1 changed files with 7 additions and 4 deletions

View File

@ -43,6 +43,7 @@ final public class ControlFile {
private final RandomAccessFile file;
private final FileChannel channel;
private final ByteBufferPacket controlData;
private final static boolean brokenFileLock = "true".equals(System.getProperty("java.nio.channels.FileLock.broken", "false"));
private long controlDataVersion=0;
private FileLock lock;
@ -71,10 +72,12 @@ final public class ControlFile {
throw new IOException("Journal is already opened by this application.");
}
lock = channel.tryLock();
if (lock == null) {
set.remove(canonicalPath);
throw new IOException("Journal is already opened by another application");
if( !brokenFileLock ) {
lock = channel.tryLock();
if (lock == null) {
set.remove(canonicalPath);
throw new IOException("Journal is already opened by another application");
}
}
}
}