7
7
"sync"
8
8
9
9
key "github.com/ipfs/go-ipfs/blocks/key"
10
-
11
- "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context"
12
10
)
13
11
14
12
type ThreadSafe struct {
@@ -18,19 +16,17 @@ type ThreadSafe struct {
18
16
19
17
// not threadsafe
20
18
type Wantlist struct {
21
- set map [key.Key ]Entry
19
+ set map [key.Key ]* Entry
22
20
}
23
21
24
22
type Entry struct {
25
23
Key key.Key
26
24
Priority int
27
25
28
- Ctx context.Context
29
- cancel func ()
30
26
RefCnt int
31
27
}
32
28
33
- type entrySlice []Entry
29
+ type entrySlice []* Entry
34
30
35
31
func (es entrySlice ) Len () int { return len (es ) }
36
32
func (es entrySlice ) Swap (i , j int ) { es [i ], es [j ] = es [j ], es [i ] }
@@ -44,41 +40,41 @@ func NewThreadSafe() *ThreadSafe {
44
40
45
41
func New () * Wantlist {
46
42
return & Wantlist {
47
- set : make (map [key.Key ]Entry ),
43
+ set : make (map [key.Key ]* Entry ),
48
44
}
49
45
}
50
46
51
- func (w * ThreadSafe ) Add (k key.Key , priority int ) {
47
+ func (w * ThreadSafe ) Add (k key.Key , priority int ) bool {
52
48
w .lk .Lock ()
53
49
defer w .lk .Unlock ()
54
- w .Wantlist .Add (k , priority )
50
+ return w .Wantlist .Add (k , priority )
55
51
}
56
52
57
- func (w * ThreadSafe ) AddEntry (e Entry ) {
53
+ func (w * ThreadSafe ) AddEntry (e * Entry ) bool {
58
54
w .lk .Lock ()
59
55
defer w .lk .Unlock ()
60
- w .Wantlist .AddEntry (e )
56
+ return w .Wantlist .AddEntry (e )
61
57
}
62
58
63
- func (w * ThreadSafe ) Remove (k key.Key ) {
59
+ func (w * ThreadSafe ) Remove (k key.Key ) bool {
64
60
w .lk .Lock ()
65
61
defer w .lk .Unlock ()
66
- w .Wantlist .Remove (k )
62
+ return w .Wantlist .Remove (k )
67
63
}
68
64
69
- func (w * ThreadSafe ) Contains (k key.Key ) (Entry , bool ) {
65
+ func (w * ThreadSafe ) Contains (k key.Key ) (* Entry , bool ) {
70
66
w .lk .RLock ()
71
67
defer w .lk .RUnlock ()
72
68
return w .Wantlist .Contains (k )
73
69
}
74
70
75
- func (w * ThreadSafe ) Entries () []Entry {
71
+ func (w * ThreadSafe ) Entries () []* Entry {
76
72
w .lk .RLock ()
77
73
defer w .lk .RUnlock ()
78
74
return w .Wantlist .Entries ()
79
75
}
80
76
81
- func (w * ThreadSafe ) SortedEntries () []Entry {
77
+ func (w * ThreadSafe ) SortedEntries () []* Entry {
82
78
w .lk .RLock ()
83
79
defer w .lk .RUnlock ()
84
80
return w .Wantlist .SortedEntries ()
@@ -94,58 +90,58 @@ func (w *Wantlist) Len() int {
94
90
return len (w .set )
95
91
}
96
92
97
- func (w * Wantlist ) Add (k key.Key , priority int ) {
93
+ func (w * Wantlist ) Add (k key.Key , priority int ) bool {
98
94
if e , ok := w .set [k ]; ok {
99
95
e .RefCnt ++
100
- return
96
+ return false
101
97
}
102
98
103
- ctx , cancel := context .WithCancel (context .Background ())
104
- w .set [k ] = Entry {
99
+ w .set [k ] = & Entry {
105
100
Key : k ,
106
101
Priority : priority ,
107
- Ctx : ctx ,
108
- cancel : cancel ,
109
102
RefCnt : 1 ,
110
103
}
104
+
105
+ return true
111
106
}
112
107
113
- func (w * Wantlist ) AddEntry (e Entry ) {
114
- if _ , ok := w .set [e .Key ]; ok {
115
- return
108
+ func (w * Wantlist ) AddEntry (e * Entry ) bool {
109
+ if ex , ok := w .set [e .Key ]; ok {
110
+ ex .RefCnt ++
111
+ return false
116
112
}
117
113
w .set [e .Key ] = e
114
+ return true
118
115
}
119
116
120
- func (w * Wantlist ) Remove (k key.Key ) {
117
+ func (w * Wantlist ) Remove (k key.Key ) bool {
121
118
e , ok := w .set [k ]
122
119
if ! ok {
123
- return
120
+ return false
124
121
}
125
122
126
123
e .RefCnt --
127
124
if e .RefCnt <= 0 {
128
125
delete (w .set , k )
129
- if e .cancel != nil {
130
- e .cancel ()
131
- }
126
+ return true
132
127
}
128
+ return false
133
129
}
134
130
135
- func (w * Wantlist ) Contains (k key.Key ) (Entry , bool ) {
131
+ func (w * Wantlist ) Contains (k key.Key ) (* Entry , bool ) {
136
132
e , ok := w .set [k ]
137
133
return e , ok
138
134
}
139
135
140
- func (w * Wantlist ) Entries () []Entry {
136
+ func (w * Wantlist ) Entries () []* Entry {
141
137
var es entrySlice
142
138
for _ , e := range w .set {
143
139
es = append (es , e )
144
140
}
145
141
return es
146
142
}
147
143
148
- func (w * Wantlist ) SortedEntries () []Entry {
144
+ func (w * Wantlist ) SortedEntries () []* Entry {
149
145
var es entrySlice
150
146
for _ , e := range w .set {
151
147
es = append (es , e )
0 commit comments