src/Pure/Build/build_process.scala
changeset 79830 d014b6c40eb0
parent 79829 a9da5e99e22f
child 79831 4611b7b47b42
equal deleted inserted replaced
79829:a9da5e99e22f 79830:d014b6c40eb0
   218     pending: State.Pending = Map.empty,
   218     pending: State.Pending = Map.empty,
   219     running: State.Running = Map.empty,
   219     running: State.Running = Map.empty,
   220     results: State.Results = Map.empty
   220     results: State.Results = Map.empty
   221   ) {
   221   ) {
   222     require(serial >= 0, "serial underflow")
   222     require(serial >= 0, "serial underflow")
   223     def inc_serial: State = {
   223 
       
   224     def next_serial: Long = {
   224       require(serial < Long.MaxValue, "serial overflow")
   225       require(serial < Long.MaxValue, "serial overflow")
   225       copy(serial = serial + 1)
   226       serial + 1
   226     }
   227     }
       
   228     def inc_serial: State = copy(serial = next_serial)
   227 
   229 
   228     def ready: List[Task] = pending.valuesIterator.filter(_.is_ready).toList.sortBy(_.name)
   230     def ready: List[Task] = pending.valuesIterator.filter(_.is_ready).toList.sortBy(_.name)
   229     def next_ready: List[Task] = ready.filter(entry => !is_running(entry.name))
   231     def next_ready: List[Task] = ready.filter(entry => !is_running(entry.name))
   230 
   232 
   231     def remove_pending(a: String): State =
   233     def remove_pending(a: String): State =
   820       db: SQL.Database,
   822       db: SQL.Database,
   821       worker_uuid: String,
   823       worker_uuid: String,
   822       state: State,
   824       state: State,
   823       old_state: State
   825       old_state: State
   824     ): State = {
   826     ): State = {
       
   827       val serial = state.next_serial
   825       val changed =
   828       val changed =
   826         List(
   829         List(
   827           update_sessions(db, state.sessions, old_state.sessions),
   830           update_sessions(db, state.sessions, old_state.sessions),
   828           update_pending(db, state.pending, old_state.pending),
   831           update_pending(db, state.pending, old_state.pending),
   829           update_running(db, state.running, old_state.running),
   832           update_running(db, state.running, old_state.running),
   830           update_results(db, state.results, old_state.results))
   833           update_results(db, state.results, old_state.results)
   831 
   834         ).exists(identity)
   832       val state1 = if (changed.exists(identity)) state.inc_serial else state
   835 
   833       if (state1.serial != state.serial) stamp_worker(db, worker_uuid, state1.serial)
   836       if (changed) {
   834 
   837         stamp_worker(db, worker_uuid, serial)
   835       state1
   838         state.copy(serial = serial)
       
   839       }
       
   840       else state
   836     }
   841     }
   837   }
   842   }
   838 
   843 
   839   def read_builds(db: SQL.Database): List[Build] =
   844   def read_builds(db: SQL.Database): List[Build] =
   840     private_data.transaction_lock(db, create = true, label = "Build_Process.read_builds") {
   845     private_data.transaction_lock(db, create = true, label = "Build_Process.read_builds") {