Skip to content

Commit 6f61683

Browse files
committed
Fix race condition
* Delete item references before unlocking the mutex
1 parent 6aa9e2b commit 6f61683

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

queue/priority_queue.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,11 +166,13 @@ func (pq *PriorityQueue) Get(number int) ([]Item, error) {
166166
}
167167

168168
var items []Item
169-
defer func() {
169+
170+
// Remove references to popped items.
171+
deleteItems := func(items []Item) {
170172
for _, item := range items {
171173
pq.itemMap[item] = false
172174
}
173-
}()
175+
}
174176

175177
if len(pq.items) == 0 {
176178
sema := newSema()
@@ -186,11 +188,13 @@ func (pq *PriorityQueue) Get(number int) ([]Item, error) {
186188
pq.disposeLock.Unlock()
187189

188190
items = pq.items.get(number)
191+
deleteItems(items)
189192
sema.response.Done()
190193
return items, nil
191194
}
192195

193196
items = pq.items.get(number)
197+
deleteItems(items)
194198
pq.lock.Unlock()
195199
return items, nil
196200
}

0 commit comments

Comments
 (0)