diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2015-01-21 23:52:28 +0100 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2015-01-21 23:52:28 +0100 |
commit | 1a729bec9cd7320f2e2e54978ef65efc2c5234d7 (patch) | |
tree | eff11a7304adb562e58f82810c263125c37877d7 | |
parent | e7f153bf3a28139a40faf5dde5270da0ce50aa4b (diff) | |
download | jgit-1a729bec9cd7320f2e2e54978ef65efc2c5234d7.tar.gz jgit-1a729bec9cd7320f2e2e54978ef65efc2c5234d7.zip |
Ensure GitCommand's "callable" guard is thread-safe
This way we can ensure that the same command instance can't be used
concurrently in multiple threads.
Bug: 458023
Change-Id: I4884a1ef2f609f9fb24dda4bd5819dffb9f174b6
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/api/GitCommand.java | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/GitCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/GitCommand.java index 329b1b5aea..e9751f94a1 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/GitCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/GitCommand.java @@ -39,6 +39,7 @@ package org.eclipse.jgit.api; import java.text.MessageFormat; import java.util.concurrent.Callable; +import java.util.concurrent.atomic.AtomicBoolean; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.internal.JGitText; @@ -71,7 +72,7 @@ public abstract class GitCommand<T> implements Callable<T> { * a state which tells whether it is allowed to call {@link #call()} on this * instance. */ - private boolean callable = true; + private AtomicBoolean callable = new AtomicBoolean(true); /** * Creates a new command which interacts with a single repository @@ -100,7 +101,7 @@ public abstract class GitCommand<T> implements Callable<T> { * this instance. */ protected void setCallable(boolean callable) { - this.callable = callable; + this.callable.set(callable); } /** @@ -112,7 +113,7 @@ public abstract class GitCommand<T> implements Callable<T> { * is {@code false} */ protected void checkCallable() { - if (!callable) + if (!callable.get()) throw new IllegalStateException(MessageFormat.format( JGitText.get().commandWasCalledInTheWrongState , this.getClass().getName())); |