diff -r 7ae25372ab04 -r 17220dc05991 src/Pure/Build/database_progress.scala --- a/src/Pure/Build/database_progress.scala Wed Mar 13 17:36:35 2024 +0100 +++ b/src/Pure/Build/database_progress.scala Wed Mar 13 23:26:30 2024 +0100 @@ -151,7 +151,6 @@ db: SQL.Database, base_progress: Progress, input_messages: Boolean = false, - output_stopped: Boolean = false, kind: String = "progress", hostname: String = Isabelle_System.hostname(), context_uuid: String = UUID.random_string(), @@ -171,7 +170,6 @@ private var _agent_uuid: String = "" private var _context: Long = -1 private var _serial: Long = 0 - private var _stopped_db: Boolean = false private var _consumer: Consumer_Thread[Progress.Output] = null def agent_uuid: String = synchronized { _agent_uuid } @@ -218,7 +216,7 @@ val expired = synchronized { _tick += 1; _tick % tick_expire == 0 } val received = db.receive(n => n.channel == Database_Progress.private_data.channel) val ok = - bulk_output.nonEmpty || expired || base_progress.stopped && output_stopped || + bulk_output.nonEmpty || expired || base_progress.stopped || received.isEmpty || received.get.contains(Database_Progress.private_data.channel_ping) || input_messages && received.get.contains(Database_Progress.private_data.channel_output) @@ -280,10 +278,10 @@ private def sync_database[A](body: => A): A = synchronized { Database_Progress.private_data.transaction_lock(db, label = "Database_Progress.sync_database") { - _stopped_db = Database_Progress.private_data.read_progress_stopped(db, _context) + val stopped_db = Database_Progress.private_data.read_progress_stopped(db, _context) - if (_stopped_db && !base_progress.stopped) base_progress.stop() - if (!_stopped_db && base_progress.stopped && output_stopped) { + if (stopped_db && !base_progress.stopped) base_progress.stop() + if (!stopped_db && base_progress.stopped) { Database_Progress.private_data.write_progress_stopped(db, _context, true) db.send(Database_Progress.private_data.channel_ping) } @@ -320,7 +318,6 @@ override def stop(): Unit = sync_context { base_progress.stop(); sync() } override def stopped: Boolean = sync_context { base_progress.stopped } - override def stopped_local: Boolean = sync_context { base_progress.stopped && !_stopped_db } override def toString: String = super.toString + ": database " + db