src/Pure/Tools/simplifier_trace.scala
changeset 66461 0b55fbc51f76
parent 65220 420f55912b3e
child 71610 5730eb952208
equal deleted inserted replaced
66460:f7b0d6fb417a 66461:0b55fbc51f76
   138     manager.send(Clear_Memory)
   138     manager.send(Clear_Memory)
   139 
   139 
   140   def send_reply(session: Session, serial: Long, answer: Answer) =
   140   def send_reply(session: Session, serial: Long, answer: Answer) =
   141     manager.send(Reply(session, serial, answer))
   141     manager.send(Reply(session, serial, answer))
   142 
   142 
   143   private lazy val manager: Consumer_Thread[Any] =
   143   def make_manager: Consumer_Thread[Any] =
   144   {
   144   {
   145     var contexts = Map.empty[Document_ID.Command, Context]
   145     var contexts = Map.empty[Document_ID.Command, Context]
   146 
   146 
   147     var memory_children = Map.empty[Long, Set[Long]]
   147     var memory_children = Map.empty[Long, Set[Long]]
   148     var memory = Map.empty[Index, Answer]
   148     var memory = Map.empty[Index, Answer]
   281       },
   281       },
   282       finish = () => contexts = Map.empty
   282       finish = () => contexts = Map.empty
   283     )
   283     )
   284   }
   284   }
   285 
   285 
       
   286   private val manager_variable = Synchronized[Option[Consumer_Thread[Any]]](None)
       
   287 
       
   288   def manager: Consumer_Thread[Any] =
       
   289     manager_variable.value match {
       
   290       case Some(thread) if thread.is_active => thread
       
   291       case _ => error("Bad Simplifier_Trace.manager thread")
       
   292     }
       
   293 
   286 
   294 
   287   /* protocol handler */
   295   /* protocol handler */
   288 
   296 
   289   class Handler extends Session.Protocol_Handler
   297   class Handler extends Session.Protocol_Handler
   290   {
   298   {
   291     assert(manager.is_active)
   299     try { manager }
       
   300     catch { case ERROR(_) => manager_variable.change(_ => Some(make_manager)) }
   292 
   301 
   293     override def exit() =
   302     override def exit() =
   294     {
   303     {
   295       manager.send(Clear_Memory)
   304       manager.send(Clear_Memory)
   296       manager.shutdown()
   305       manager.shutdown()
       
   306       manager_variable.change(_ => None)
   297     }
   307     }
   298 
   308 
   299     private def cancel(msg: Prover.Protocol_Output): Boolean =
   309     private def cancel(msg: Prover.Protocol_Output): Boolean =
   300       msg.properties match {
   310       msg.properties match {
   301         case Markup.Simp_Trace_Cancel(serial) =>
   311         case Markup.Simp_Trace_Cancel(serial) =>