git://source.jalview.org
/
vamsas.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
note on occasional null pointer exceptions raised on JVM shutdown
[vamsas.git]
/
src
/
uk
/
ac
/
vamsas
/
client
/
simpleclient
/
FileLock.java
diff --git
a/src/uk/ac/vamsas/client/simpleclient/FileLock.java
b/src/uk/ac/vamsas/client/simpleclient/FileLock.java
index
ef29f47
..
8a340c3
100644
(file)
--- a/
src/uk/ac/vamsas/client/simpleclient/FileLock.java
+++ b/
src/uk/ac/vamsas/client/simpleclient/FileLock.java
@@
-34,10
+34,13
@@
public class FileLock extends Lock {
try {
advisory=new NativeLock(_lock, block);
} catch (Exception e) {
try {
advisory=new NativeLock(_lock, block);
} catch (Exception e) {
- log.fatal("Failed to create advisory lock file "+_lock,e);
- throw new Error("Failed to create advisory lock file "+_lock);
+ if (!_lock.exists()) {
+ // advisory cannot be created. this is serious.
+ log.fatal("Failed to create advisory lock file "+_lock,e);
+ throw new Error("Failed to create advisory lock file "+_lock);
+ }
}
}
- return advisory.isLocked();
+ return (advisory!=null) && advisory.isLocked();
}
/**
* call to clear up a filelock file after its been made
}
/**
* call to clear up a filelock file after its been made
@@
-45,9
+48,13
@@
public class FileLock extends Lock {
*/
private void tidy() {
if (_lock!=null) {
*/
private void tidy() {
if (_lock!=null) {
- if ( advisory!=null)
+ if ( advisory!=null) {
+ // TODO: fix occasional exceptions raised here (usually on JVM shutdown)
+ if (advisory.target!=null) {
+ advisory.target.deleteOnExit(); // release will null the target
+ }
advisory.release(true);
advisory.release(true);
- advisory.target.deleteOnExit();
+ }
advisory=null;
_lock=null;
}
advisory=null;
_lock=null;
}
@@
-60,7
+67,7
@@
public class FileLock extends Lock {
super(lockfile);
// try and get a lock.
try {
super(lockfile);
// try and get a lock.
try {
- _lock = new File(lockfile.getParentFile(), lockfile.getName()+"."+_LockSuffix);
+ _lock = make_lockForTarget(lockfile);
if (!ensureLockFile(block)) {
log.debug("Couldn't get lock on "+_lock);
tidy();
if (!ensureLockFile(block)) {
log.debug("Couldn't get lock on "+_lock);
tidy();
@@
-83,7
+90,14
@@
public class FileLock extends Lock {
+ lockfile.getAbsolutePath(),e);
}
}
+ lockfile.getAbsolutePath(),e);
}
}
-
+ /**
+ *
+ * @param lockfile target of lock
+ * @return file object that will be locked for lockfile
+ */
+ private File make_lockForTarget(File lockfile) {
+ return new File(lockfile.getParentFile(), lockfile.getName()+"."+_LockSuffix);
+ }
private boolean openRaFile() throws IOException {
if (target==null)
return false;
private boolean openRaFile() throws IOException {
if (target==null)
return false;
@@
-204,4
+218,12
@@
public class FileLock extends Lock {
log.debug("Failed to getRaChannel on target "+target);
return null;
}
log.debug("Failed to getRaChannel on target "+target);
return null;
}
+ public boolean isTargetLockFile(File afile) {
+ if (isLocked())
+ {
+ if (target.equals(afile) || make_lockForTarget(target).equals(afile))
+ return true;
+ }
+ return false;
+ }
}
}