diff --git a/src/libextra/workcache.rs b/src/libextra/workcache.rs index b0f9dc06bf19..9825a20e86c9 100644 --- a/src/libextra/workcache.rs +++ b/src/libextra/workcache.rs @@ -15,6 +15,7 @@ use digest::DigestUtil; use json; use sha1::Sha1; use serialize::{Encoder, Encodable, Decoder, Decodable}; +use arc::RWARC; use treemap::TreeMap; use std::cell::Cell; @@ -123,7 +124,7 @@ struct Database { } impl Database { - pub fn prepare(&mut self, + pub fn prepare(&self, fn_name: &str, declared_inputs: &WorkMap) -> Option<(WorkMap, WorkMap, ~str)> { @@ -161,7 +162,7 @@ impl Logger { } struct Context { - db: @mut Database, + db: RWARC, logger: @mut Logger, cfg: @json::Object, freshness: TreeMap<~str,@fn(&str,&str)->bool> @@ -214,7 +215,7 @@ fn digest_file(path: &Path) -> ~str { } impl Context { - pub fn new(db: @mut Database, lg: @mut Logger, cfg: @json::Object) + pub fn new(db: RWARC, lg: @mut Logger, cfg: @json::Object) -> Context { Context { db: db, @@ -290,7 +291,9 @@ impl TPrep for Prep { &self, blk: ~fn(&Exec) -> T) -> Work { let mut bo = Some(blk); - let cached = self.ctxt.db.prepare(self.fn_name, &self.declared_inputs); + let cached = do self.ctxt.db.read |db| { + db.prepare(self.fn_name, &self.declared_inputs) + }; match cached { Some((ref disc_in, ref disc_out, ref res)) @@ -346,12 +349,13 @@ fn unwrap