src/Pure/Tools/build_process.scala
changeset 77590 edc96be6b939
parent 77588 066d5df144f0
child 77594 7723cf88658f
equal deleted inserted replaced
77589:46a033c4701b 77590:edc96be6b939
   132 
   132 
   133     def prepare_database(): Unit = {
   133     def prepare_database(): Unit = {
   134       using_option(open_database()) { db =>
   134       using_option(open_database()) { db =>
   135         db.transaction {
   135         db.transaction {
   136           for (table <- Data.all_tables) db.create_table(table)
   136           for (table <- Data.all_tables) db.create_table(table)
       
   137           db.lock_tables(Data.all_tables)
   137           Data.clean_build(db)
   138           Data.clean_build(db)
   138         }
   139         }
   139         db.rebuild()
   140         db.rebuild()
   140       }
   141       }
   141     }
   142     }
   751       val serial = if (changed.exists(identity)) State.inc_serial(serial0) else serial0
   752       val serial = if (changed.exists(identity)) State.inc_serial(serial0) else serial0
   752 
   753 
   753       stamp_worker(db, worker_uuid, serial)
   754       stamp_worker(db, worker_uuid, serial)
   754       state.set_serial(serial).set_workers(read_workers(db))
   755       state.set_serial(serial).set_workers(read_workers(db))
   755     }
   756     }
       
   757 
       
   758 
       
   759     /* transaction_lock */
       
   760 
       
   761     def transaction_lock[A](db: SQL.Database, body: => A): A =
       
   762       db.transaction {
       
   763         db.lock_tables(Build_Process.Data.all_tables)
       
   764         body
       
   765       }
   756   }
   766   }
   757 }
   767 }
   758 
   768 
   759 
   769 
   760 
   770 
   784 
   794 
   785   protected def synchronized_database[A](body: => A): A =
   795   protected def synchronized_database[A](body: => A): A =
   786     synchronized {
   796     synchronized {
   787       _database match {
   797       _database match {
   788         case None => body
   798         case None => body
   789         case Some(db) => db.transaction { body }
   799         case Some(db) => Build_Process.Data.transaction_lock(db, body)
   790       }
   800       }
   791     }
   801     }
   792 
   802 
   793   private def sync_database(): Unit =
   803   private def sync_database(): Unit =
   794     synchronized_database {
   804     synchronized_database {