diff --git service/src/java/org/apache/hive/service/cli/session/SessionManager.java service/src/java/org/apache/hive/service/cli/session/SessionManager.java index 277519cba5..ce0d507b41 100644 --- service/src/java/org/apache/hive/service/cli/session/SessionManager.java +++ service/src/java/org/apache/hive/service/cli/session/SessionManager.java @@ -578,12 +578,15 @@ private boolean withinLimits(final String track, final int limit) { return true; } - public synchronized void closeSession(SessionHandle sessionHandle) throws HiveSQLException { - HiveSession session = handleToSession.remove(sessionHandle); - if (session == null) { - throw new HiveSQLException("Session does not exist: " + sessionHandle); + public void closeSession(SessionHandle sessionHandle) throws HiveSQLException { + final HiveSession session; + synchronized(sessionAddLock) { + session = handleToSession.remove(sessionHandle); + if (session == null) { + throw new HiveSQLException("Session does not exist: " + sessionHandle); + } + LOG.info("Session closed, " + sessionHandle + ", current sessions:" + getOpenSessionCount()); } - LOG.info("Session closed, " + sessionHandle + ", current sessions:" + getOpenSessionCount()); closeSessionInternal(session); }