From 1a729bec9cd7320f2e2e54978ef65efc2c5234d7 Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Wed, 21 Jan 2015 23:52:28 +0100 Subject: [PATCH] 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 --- org.eclipse.jgit/src/org/eclipse/jgit/api/GitCommand.java | 7 ++++--- 1 file 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 329b1b5ae..e9751f94a 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 implements Callable { * 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 implements Callable { * this instance. */ protected void setCallable(boolean callable) { - this.callable = callable; + this.callable.set(callable); } /** @@ -112,7 +113,7 @@ public abstract class GitCommand implements Callable { * is {@code false} */ protected void checkCallable() { - if (!callable) + if (!callable.get()) throw new IllegalStateException(MessageFormat.format( JGitText.get().commandWasCalledInTheWrongState , this.getClass().getName()));