8
8
// option. This file may not be copied, modified, or distributed
9
9
// except according to those terms.
10
10
11
+ use cell:: Cell ;
11
12
use c_str:: ToCStr ;
12
13
use cast:: transmute;
13
14
use libc:: { c_char, size_t, STDERR_FILENO } ;
14
15
use io;
15
16
use io:: { Writer , WriterUtil } ;
16
17
use option:: { Option , None , Some } ;
17
18
use uint;
19
+ use rt:: env;
20
+ use rt:: local:: Local ;
21
+ use rt:: task:: Task ;
18
22
use str;
19
23
use str:: { OwnedStr , StrSlice } ;
20
24
use sys;
@@ -26,22 +30,31 @@ pub static MUT_BIT: uint = 1 << (uint::bits - 2);
26
30
static ALL_BITS : uint = FROZEN_BIT | MUT_BIT ;
27
31
28
32
#[ deriving( Eq ) ]
29
- struct BorrowRecord {
33
+ pub struct BorrowRecord {
30
34
box : * mut raw:: Box < ( ) > ,
31
35
file : * c_char ,
32
36
line : size_t
33
37
}
34
38
35
39
fn try_take_task_borrow_list ( ) -> Option < ~[ BorrowRecord ] > {
36
- // XXX
37
- None
40
+ do Local :: borrow :: < Task , Option < ~[ BorrowRecord ] > > |task| {
41
+ task. borrow_list . take ( )
42
+ }
38
43
}
39
44
40
- fn swap_task_borrow_list ( _f : & fn ( ~[ BorrowRecord ] ) -> ~[ BorrowRecord ] ) {
41
- // XXX
45
+ fn swap_task_borrow_list ( f : & fn ( ~[ BorrowRecord ] ) -> ~[ BorrowRecord ] ) {
46
+ let borrows = match try_take_task_borrow_list ( ) {
47
+ Some ( l) => l,
48
+ None => ~[ ]
49
+ } ;
50
+ let borrows = f ( borrows) ;
51
+ let borrows = Cell :: new ( borrows) ;
52
+ do Local :: borrow :: < Task , ( ) > |task| {
53
+ task. borrow_list = Some ( borrows. take ( ) ) ;
54
+ }
42
55
}
43
56
44
- pub unsafe fn clear_task_borrow_list ( ) {
57
+ pub fn clear_task_borrow_list ( ) {
45
58
// pub because it is used by the box annihilator.
46
59
let _ = try_take_task_borrow_list ( ) ;
47
60
}
@@ -89,8 +102,7 @@ unsafe fn debug_borrow<T>(tag: &'static str,
89
102
//! A useful debugging function that prints a pointer + tag + newline
90
103
//! without allocating memory.
91
104
92
- // XXX
93
- if false {
105
+ if ENABLE_DEBUG && env:: debug_borrow ( ) {
94
106
debug_borrow_slow ( tag, p, old_bits, new_bits, filename, line) ;
95
107
}
96
108
0 commit comments