src/Pure/PIDE/prover.scala
changeset 65317 b9f5cd845616
parent 65316 c0fb8405416c
child 65345 2fdd4431b30e
--- a/src/Pure/PIDE/prover.scala	Sat Mar 18 21:40:47 2017 +0100
+++ b/src/Pure/PIDE/prover.scala	Sat Mar 18 22:11:05 2017 +0100
@@ -89,17 +89,22 @@
     for (msg <- main :: reports) receiver(new Prover.Output(xml_cache.elem(msg)))
   }
 
-  private def exit_message(rc: Int)
+  private def exit_message(result: Process_Result)
   {
-    output(Markup.EXIT, Markup.Return_Code(rc), List(XML.Text("Return code: " + rc.toString)))
+    output(Markup.EXIT, Markup.Process_Result(result),
+      List(XML.Text("Return code: " + result.rc.toString)))
   }
 
 
 
   /** process manager **/
 
-  private val process_result: Future[Int] =
-    Future.thread("process_result") { process.join }
+  private val process_result: Future[Process_Result] =
+    Future.thread("process_result") {
+      val rc = process.join
+      val timing = process.get_timing
+      Process_Result(rc, timing = timing)
+    }
 
   private def terminate_process()
   {
@@ -133,7 +138,7 @@
     if (startup_failed) {
       terminate_process()
       process_result.join
-      exit_message(127)
+      exit_message(Process_Result(127))
     }
     else {
       val (command_stream, message_stream) = channel.rendezvous()
@@ -143,12 +148,12 @@
       val stderr = physical_output(true)
       val message = message_output(message_stream)
 
-      val rc = process_result.join
+      val result = process_result.join
       system_output("process terminated")
       command_input_close()
       for (thread <- List(stdout, stderr, message)) thread.join
       system_output("process_manager terminated")
-      exit_message(rc)
+      exit_message(result)
     }
     channel.accepted()
   }