You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2006/04/10 22:03:47 UTC

svn commit: r393039 - /incubator/activemq/trunk/activeio/activeio-core/src/main/java/org/apache/activeio/journal/active/ControlFile.java

Author: chirino
Date: Mon Apr 10 13:03:46 2006
New Revision: 393039

URL: http://svn.apache.org/viewcvs?rev=393039&view=rev
Log:
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.

Modified:
    incubator/activemq/trunk/activeio/activeio-core/src/main/java/org/apache/activeio/journal/active/ControlFile.java

Modified: incubator/activemq/trunk/activeio/activeio-core/src/main/java/org/apache/activeio/journal/active/ControlFile.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activeio/activeio-core/src/main/java/org/apache/activeio/journal/active/ControlFile.java?rev=393039&r1=393038&r2=393039&view=diff
==============================================================================
--- incubator/activemq/trunk/activeio/activeio-core/src/main/java/org/apache/activeio/journal/active/ControlFile.java (original)
+++ incubator/activemq/trunk/activeio/activeio-core/src/main/java/org/apache/activeio/journal/active/ControlFile.java Mon Apr 10 13:03:46 2006
@@ -43,6 +43,7 @@
     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 @@
                     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");
+                    }
                 }
             }
         }