diff options
Diffstat (limited to 'src/main/java/org/openslx/taskmanager/tasks/LdadpLauncher.java')
-rw-r--r-- | src/main/java/org/openslx/taskmanager/tasks/LdadpLauncher.java | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/main/java/org/openslx/taskmanager/tasks/LdadpLauncher.java b/src/main/java/org/openslx/taskmanager/tasks/LdadpLauncher.java index 34f7b07..cb648b9 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/LdadpLauncher.java +++ b/src/main/java/org/openslx/taskmanager/tasks/LdadpLauncher.java @@ -3,7 +3,7 @@ package org.openslx.taskmanager.tasks; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; import org.openslx.satserver.util.Constants; import org.openslx.taskmanager.api.SystemCommandTask; @@ -16,8 +16,8 @@ public class LdadpLauncher extends SystemCommandTask private int[] ids = null; private Output status = new Output(); - - private static AtomicBoolean isRunning = new AtomicBoolean(); + + private static AtomicReference<LdadpLauncher> isRunning = new AtomicReference<>(); @Override protected boolean initTask() @@ -33,8 +33,11 @@ public class LdadpLauncher extends SystemCommandTask @Override protected String[] initCommandLine() { - if (!isRunning.compareAndSet( false, true )) { - status.addMessage( "Another operation is already in progress." ); + if ( !isRunning.compareAndSet( null, this ) ) { + LdadpLauncher other = isRunning.get(); + if ( other != null && !Arrays.equals( this.ids, other.ids ) ) { + status.addMessage( "Another operation is already in progress." ); + } return null; } List<String> args = new ArrayList<>(); @@ -55,7 +58,7 @@ public class LdadpLauncher extends SystemCommandTask @Override protected boolean processEnded( int exitCode ) { - isRunning.set( false ); + isRunning.compareAndSet( this, null ); return exitCode == 0; } |