--- a/src/Pure/Tools/build_process.scala Wed Mar 08 20:19:05 2023 +0100
+++ b/src/Pure/Tools/build_process.scala Wed Mar 08 22:08:48 2023 +0100
@@ -134,6 +134,7 @@
using_option(open_database()) { db =>
db.transaction {
for (table <- Data.all_tables) db.create_table(table)
+ db.lock_tables(Data.all_tables)
Data.clean_build(db)
}
db.rebuild()
@@ -753,6 +754,15 @@
stamp_worker(db, worker_uuid, serial)
state.set_serial(serial).set_workers(read_workers(db))
}
+
+
+ /* transaction_lock */
+
+ def transaction_lock[A](db: SQL.Database, body: => A): A =
+ db.transaction {
+ db.lock_tables(Build_Process.Data.all_tables)
+ body
+ }
}
}
@@ -786,7 +796,7 @@
synchronized {
_database match {
case None => body
- case Some(db) => db.transaction { body }
+ case Some(db) => Build_Process.Data.transaction_lock(db, body)
}
}