@@ -15,6 +15,7 @@ use digest::DigestUtil;
15
15
use json;
16
16
use sha1:: Sha1 ;
17
17
use serialize:: { Encoder , Encodable , Decoder , Decodable } ;
18
+ use arc:: RWARC ;
18
19
use treemap:: TreeMap ;
19
20
20
21
use std:: cell:: Cell ;
@@ -123,7 +124,7 @@ struct Database {
123
124
}
124
125
125
126
impl Database {
126
- pub fn prepare ( & mut self ,
127
+ pub fn prepare ( & self ,
127
128
fn_name : & str ,
128
129
declared_inputs : & WorkMap )
129
130
-> Option < ( WorkMap , WorkMap , ~str ) > {
@@ -161,7 +162,7 @@ impl Logger {
161
162
}
162
163
163
164
struct Context {
164
- db: @mut Database,
165
+ db: RWARC< Database> ,
165
166
logger: @mut Logger,
166
167
cfg: @json::Object,
167
168
freshness: TreeMap<~str,@fn(&str,&str)->bool>
@@ -214,7 +215,7 @@ fn digest_file(path: &Path) -> ~str {
214
215
}
215
216
216
217
impl Context {
217
- pub fn new(db: @mut Database, lg: @mut Logger, cfg: @json::Object)
218
+ pub fn new(db: RWARC< Database> , lg: @mut Logger, cfg: @json::Object)
218
219
-> Context {
219
220
Context {
220
221
db: db,
@@ -290,7 +291,9 @@ impl TPrep for Prep {
290
291
& self , blk: ~fn ( & Exec ) -> T ) -> Work < T > {
291
292
let mut bo = Some ( blk) ;
292
293
293
- let cached = self . ctxt. db. prepare( self . fn_name, & self . declared_inputs) ;
294
+ let cached = do self . ctxt. db. read |db| {
295
+ db. prepare( self . fn_name, & self . declared_inputs)
296
+ } ;
294
297
295
298
match cached {
296
299
Some ( ( ref disc_in, ref disc_out, ref res) )
@@ -346,12 +349,13 @@ fn unwrap<T:Send +
346
349
let s = json_encode( & v) ;
347
350
348
351
let p = & * ww. prep;
349
- let db = p. ctxt. db;
350
- db. cache( p. fn_name,
351
- & p. declared_inputs,
352
- & exe. discovered_inputs,
353
- & exe. discovered_outputs,
354
- s) ;
352
+ do p. ctxt. db. write |db| {
353
+ db. cache( p. fn_name,
354
+ & p. declared_inputs,
355
+ & exe. discovered_inputs,
356
+ & exe. discovered_outputs,
357
+ s) ;
358
+ }
355
359
v
356
360
}
357
361
}
@@ -361,9 +365,9 @@ fn unwrap<T:Send +
361
365
fn test( ) {
362
366
use std:: io:: WriterUtil ;
363
367
364
- let db = @ mut Database { db_filename : Path ( "db.json" ) ,
365
- db_cache : TreeMap :: new( ) ,
366
- db_dirty : false } ;
368
+ let db = RWARC ( Database { db_filename : Path ( "db.json" ) ,
369
+ db_cache : TreeMap :: new( ) ,
370
+ db_dirty : false } ) ;
367
371
let lg = @mut Logger { a : ( ) } ;
368
372
let cfg = @HashMap :: new( ) ;
369
373
let cx = @Context :: new( db, lg, cfg) ;
0 commit comments