diff options
| author | Graydon Hoare <graydon@mozilla.com> | 2013-07-17 16:18:43 -0700 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2013-07-23 15:16:14 -0700 |
| commit | d5803e67eecda097932424a6c7b52cd1addd76b9 (patch) | |
| tree | c04513d30eb6220fe29e1d5be9ea09122c69e89e | |
| parent | 48dd72888c67e4afa193565ed288e6351253bf29 (diff) | |
| download | rust-d5803e67eecda097932424a6c7b52cd1addd76b9.tar.gz rust-d5803e67eecda097932424a6c7b52cd1addd76b9.zip | |
extra: access workcache db via RWARC.
| -rw-r--r-- | src/libextra/workcache.rs | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/libextra/workcache.rs b/src/libextra/workcache.rs index b0f9dc06bf1..9825a20e86c 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<Database>, 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<Database>, lg: @mut Logger, cfg: @json::Object) -> Context { Context { db: db, @@ -290,7 +291,9 @@ impl TPrep for Prep { &self, blk: ~fn(&Exec) -> T) -> Work<T> { 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<T:Send + let s = json_encode(&v); let p = &*ww.prep; - let db = p.ctxt.db; - db.cache(p.fn_name, - &p.declared_inputs, - &exe.discovered_inputs, - &exe.discovered_outputs, - s); + do p.ctxt.db.write |db| { + db.cache(p.fn_name, + &p.declared_inputs, + &exe.discovered_inputs, + &exe.discovered_outputs, + s); + } v } } @@ -361,9 +365,9 @@ fn unwrap<T:Send + fn test() { use std::io::WriterUtil; - let db = @mut Database { db_filename: Path("db.json"), - db_cache: TreeMap::new(), - db_dirty: false }; + let db = RWARC(Database { db_filename: Path("db.json"), + db_cache: TreeMap::new(), + db_dirty: false }); let lg = @mut Logger { a: () }; let cfg = @HashMap::new(); let cx = @Context::new(db, lg, cfg); |
