diff --git ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java index 97c8124..6756ca5 100644 --- ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java +++ ql/src/java/org/apache/hadoop/hive/ql/session/SessionState.java @@ -1648,7 +1648,12 @@ public void setCurrentDatabase(String currentDatabase) { public void close() throws IOException { registry.clear(); if (txnMgr != null) txnMgr.closeTxnManager(); - JavaUtils.closeClassLoadersTo(sessionConf.getClassLoader(), parentLoader); + // To void file descriptor leaking, make sure parentLoader is the same for + // the thread that was later used for handling some other session. + if (JavaUtils.closeClassLoadersTo(conf.getClassLoader(), parentLoader)) { + Thread.currentThread().setContextClassLoader(parentLoader); + getConf().setClassLoader(parentLoader); + } File resourceDir = new File(getConf().getVar(HiveConf.ConfVars.DOWNLOADED_RESOURCES_DIR)); LOG.debug("Removing resource dir " + resourceDir);