activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rajdav...@apache.org
Subject svn commit: r1326252 - /activemq/trunk/kahadb/src/main/java/org/apache/kahadb/util/LockFile.java
Date Sun, 15 Apr 2012 04:50:53 GMT
Author: rajdavies
Date: Sun Apr 15 04:50:53 2012
New Revision: 1326252

URL: http://svn.apache.org/viewvc?rev=1326252&view=rev
Log:
Applied patch for https://issues.apache.org/jira/browse/AMQ-3301

Modified:
    activemq/trunk/kahadb/src/main/java/org/apache/kahadb/util/LockFile.java

Modified: activemq/trunk/kahadb/src/main/java/org/apache/kahadb/util/LockFile.java
URL: http://svn.apache.org/viewvc/activemq/trunk/kahadb/src/main/java/org/apache/kahadb/util/LockFile.java?rev=1326252&r1=1326251&r2=1326252&view=diff
==============================================================================
--- activemq/trunk/kahadb/src/main/java/org/apache/kahadb/util/LockFile.java (original)
+++ activemq/trunk/kahadb/src/main/java/org/apache/kahadb/util/LockFile.java Sun Apr 15 04:50:53
2012
@@ -51,36 +51,47 @@ public class LockFile {
             return;
         }
 
-        if( lockCounter>0 ) {
+        if (lockCounter > 0) {
             return;
         }
 
         IOHelper.mkdirs(file.getParentFile());
-        if (System.getProperty(getVmLockKey()) != null) {
-            throw new IOException("File '" + file + "' could not be locked as lock is already
held for this jvm.");
+        synchronized (LockFile.class) {
+            if (System.getProperty(getVmLockKey()) != null) {
+                throw new IOException("File '" + file + "' could not be locked as lock is
already held for this jvm.");
+            }
+            System.setProperty(getVmLockKey(), new Date().toString());
         }
-        if (lock == null) {
-            readFile = new RandomAccessFile(file, "rw");
-            IOException reason = null;
-            try {
-                lock = readFile.getChannel().tryLock(0, Math.max(1, readFile.getChannel().size()),
false);
-            } catch (OverlappingFileLockException e) {
-                reason = IOExceptionSupport.create("File '" + file + "' could not be locked.",e);
-            } catch (IOException ioe) {
-                reason = ioe;
+        try {
+            if (lock == null) {
+                readFile = new RandomAccessFile(file, "rw");
+                IOException reason = null;
+                try {
+                    lock = readFile.getChannel().tryLock(0, Math.max(1, readFile.getChannel().size()),
false);
+                } catch (OverlappingFileLockException e) {
+                    reason = IOExceptionSupport.create("File '" + file + "' could not be
locked.", e);
+                } catch (IOException ioe) {
+                    reason = ioe;
+                }
+                if (lock != null) {
+                    lockCounter++;
+                    System.setProperty(getVmLockKey(), new Date().toString());
+                } else {
+                    // new read file for next attempt
+                    closeReadFile();
+                    if (reason != null) {
+                        throw reason;
+                    }
+                    throw new IOException("File '" + file + "' could not be locked.");
+                }
+
             }
-            if (lock != null) {
-                lockCounter++;
-                System.setProperty(getVmLockKey(), new Date().toString());
-            } else {
-                // new read file for next attempt
-                closeReadFile();
-                if (reason != null) {
-                    throw reason;
+        } finally {
+            synchronized (LockFile.class) {
+                if (lock == null) {
+                    System.getProperties().remove(getVmLockKey());
                 }
-                throw new IOException("File '" + file + "' could not be locked.");
             }
-
         }
     }
 
@@ -92,7 +103,7 @@ public class LockFile {
         }
 
         lockCounter--;
-        if( lockCounter!=0 ) {
+        if (lockCounter != 0) {
             return;
         }
 
@@ -107,7 +118,7 @@ public class LockFile {
         }
         closeReadFile();
 
-        if( deleteOnUnlock ) {
+        if (deleteOnUnlock) {
             file.delete();
         }
     }



Mime
View raw message