summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-09-28 18:01:53 +0200
committerSimon Rettberg2015-09-28 18:01:53 +0200
commit2469aaed02281c58173d3cfbde88482690c3d6af (patch)
tree223fba7da5c455809794545060aed2e1292b293b /src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java
parent[mount-store] Beefed up retry logic (diff)
downloadtmlite-bwlp-2469aaed02281c58173d3cfbde88482690c3d6af.tar.gz
tmlite-bwlp-2469aaed02281c58173d3cfbde88482690c3d6af.tar.xz
tmlite-bwlp-2469aaed02281c58173d3cfbde88482690c3d6af.zip
Allow only one running instance of critical tasks
Diffstat (limited to 'src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java')
-rw-r--r--src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java b/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java
index 70ae195..f3ebc82 100644
--- a/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java
+++ b/src/main/java/org/openslx/taskmanager/tasks/CompileIPxe.java
@@ -4,6 +4,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
@@ -29,6 +30,8 @@ public class CompileIPxe extends AbstractTask
private Output status = new Output();
+ private static AtomicBoolean isRunning = new AtomicBoolean();
+
@Override
protected boolean initTask()
{
@@ -49,12 +52,20 @@ public class CompileIPxe extends AbstractTask
@Override
protected boolean execute()
{
- boolean ret = true;
- if ( !updateMenu() )
- ret = false;
- if ( !updateIpxe() )
- ret = false;
- return ret;
+ if (!isRunning.compareAndSet( false, true )) {
+ status.error = "Another operation is already in progress.";
+ return false;
+ }
+ try {
+ boolean ret = true;
+ if ( !updateMenu() )
+ ret = false;
+ if ( !updateIpxe() )
+ ret = false;
+ return ret;
+ } finally {
+ isRunning.set( false );
+ }
}
private boolean updateMenu()