diff --git a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java index 83490d2..ce79498 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java @@ -42,6 +42,7 @@ import java.util.UUID; import java.util.concurrent.CancellationException; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; import org.apache.commons.lang.StringUtils; @@ -160,7 +161,7 @@ /** * The flag to indicate if the session already started so we can skip the init */ - private boolean isStarted = false; + private AtomicBoolean isStarted = new AtomicBoolean(false); /* * HiveHistory Object */ @@ -598,13 +599,14 @@ public static void endStart(SessionState startSs) startSs.tezSessionState.endOpen(); } - synchronized private static void start(SessionState startSs, boolean isAsync, LogHelper console) { + private static void start(SessionState startSs, boolean isAsync, LogHelper console) { setCurrentSessionState(startSs); - if (startSs.isStarted) { - return; + synchronized(SessionState.class) { + if (!startSs.isStarted.compareAndSet(false, true)) { + return; + } } - startSs.isStarted = true; if (startSs.hiveHist == null){ if (startSs.getConf().getBoolVar(HiveConf.ConfVars.HIVE_SESSION_HISTORY_ENABLED)) { diff --git a/ql/src/test/scripts/testgrep_win.bat b/ql/src/test/scripts/testgrep_win.bat