diff --git a/common/src/java/org/apache/hive/common/util/ShutdownHookManager.java b/common/src/java/org/apache/hive/common/util/ShutdownHookManager.java index b5f7e69..5efeda9 100644 --- a/common/src/java/org/apache/hive/common/util/ShutdownHookManager.java +++ b/common/src/java/org/apache/hive/common/util/ShutdownHookManager.java @@ -172,9 +172,12 @@ private void addShutdownHookInternal(Runnable shutdownHook, int priority) { * * @param shutdownHook shutdownHook to remove. * @return TRUE if the shutdownHook was registered and removed, - * FALSE otherwise. + * FALSE otherwise (including when shutdownHook == null) */ public static boolean removeShutdownHook(Runnable shutdownHook) { + if (shutdownHook == null) { + return false; + } return MGR.removeShutdownHookInternal(shutdownHook); } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java index 3d5f3b5..f5e57bd 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java @@ -395,6 +395,8 @@ public int compile(String command, boolean resetTaskIds) { final HiveTxnManager txnManager = SessionState.get().initTxnMgr(conf); // In case when user Ctrl-C twice to kill Hive CLI JVM, we want to release locks + // if compile is being called multiple times, clear the old shutdownhook + ShutdownHookManager.removeShutdownHook(shutdownRunner); shutdownRunner = new Runnable() { @Override public void run() { @@ -1906,10 +1908,8 @@ public void destroy() { LOG.warn("Exception when releasing locking in destroy: " + e.getMessage()); } - if (shutdownRunner != null) { - ShutdownHookManager.removeShutdownHook(shutdownRunner); - } } + ShutdownHookManager.removeShutdownHook(shutdownRunner); } public org.apache.hadoop.hive.ql.plan.api.Query getQueryPlan() throws IOException {