Vamsas Archive Reader and simple test class.
[vamsas.git] / src / org / vamsas / client / simpleclient / Lock.java
index a185233..175728e 100644 (file)
@@ -8,7 +8,7 @@ import java.nio.channels.FileLock;
 
 /**
  * transient object representing a file lock
- * 
+ * This lock should hold for all processes interacting in a session.
  * 
  * @author jimp
  * 
@@ -16,7 +16,7 @@ import java.nio.channels.FileLock;
 
 public class Lock {
   FileLock lock = null;
-  RandomAccessFile rafile;
+  RandomAccessFile rafile=null;
   /**
    * creates a valid Lock (test with <method>isLocked</method>)
    * if a lock could be obtained for <param>lockfile</param>
@@ -25,7 +25,7 @@ public class Lock {
   public Lock(java.io.File lockfile) {
     // try and get a lock.
     lock = null;
-
+    
     try {
       if (!lockfile.exists())
         if (!lockfile.createNewFile()) {
@@ -33,6 +33,9 @@ public class Lock {
         }
       
       lock = (rafile=new RandomAccessFile(lockfile,"rw")).getChannel().tryLock();
+      if (lock==null || !lock.isValid())
+        // failed to get lock. Close the file channel
+        rafile.getChannel().close();
     } catch (FileNotFoundException e) {
       System.err.println("Error! Couldn't create a lockfile at "
           + lockfile.getAbsolutePath());
@@ -43,7 +46,7 @@ public class Lock {
       e.printStackTrace();
     }
   }
-
+  
   boolean isLocked() {
     if (lock != null && lock.isValid()) {
       return true;
@@ -51,16 +54,19 @@ public class Lock {
     return false;
   }
   public void release() {
-    if (lock!=null) {
-      try {
-        rafile.close();
+    try {
+      if (lock!=null && lock.isValid())
         lock.release();
-      } catch (IOException e) {
-        // TODO Auto-generated catch block
-        e.printStackTrace(System.err);
-      }
+      if (rafile!=null && rafile.getChannel().isOpen())
+        rafile.getChannel().close();
+    } catch (IOException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace(System.err);
     }
+    lock=null;
+    rafile=null;
   }
+  
   /* Explicitly release lock (probably don't need to do this!)
    * @see java.lang.Object#finalize()
    */