Github user aarondav commented on a diff in the pull request:

    https://github.com/apache/spark/pull/35#discussion_r11938616
  
    --- Diff: 
core/src/main/scala/org/apache/spark/deploy/worker/ExecutorRunner.scala ---
    @@ -58,30 +58,29 @@ private[spark] class ExecutorRunner(
           override def run() { fetchAndRunExecutor() }
         }
         workerThread.start()
    -
         // Shutdown hook that kills actors on shutdown.
         shutdownHook = new Thread() {
           override def run() {
    -        if (process != null) {
    -          logInfo("Shutdown hook killing child process.")
    -          process.destroy()
    -          process.waitFor()
    -        }
    +        killProcess()
           }
         }
         Runtime.getRuntime.addShutdownHook(shutdownHook)
       }
     
    +  private def killProcess() {
    +    if (process != null) {
    +      logInfo("Killing process!")
    +      process.destroy()
    +      process.waitFor()
    +      process = null
    --- End diff --
    
    Setting the process to null may actually produce a NullPointerException if 
we're unlucky with the race condition. Let's just go with the flow and not set 
process to null -- both destroy and waitFor are resilient to processes that are 
already dead.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to