Skip to content

Commit e880e89

Browse files
author
DavyC
committed
Dispose while checking the leftover sema
1 parent 78bcce4 commit e880e89

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

queue/queue.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,12 @@ func (q *Queue) Dispose() []interface{} {
294294
q.disposed = true
295295
for _, waiter := range q.waiters {
296296
waiter.response.Add(1)
297-
waiter.ready <- true
297+
select {
298+
case waiter.ready <- true:
299+
// release Poll immediately
300+
default:
301+
// ignore if it's a timeout or in the get
302+
}
298303
}
299304

300305
disposedItems := q.items

queue/queue_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,19 @@ func TestEmptyGetWithDispose(t *testing.T) {
256256
assert.IsType(t, ErrDisposed, err)
257257
}
258258

259+
func TestDisposeAfterEmptyPoll(t *testing.T) {
260+
q := New(10)
261+
262+
_, err := q.Poll(1, time.Millisecond)
263+
assert.IsType(t, ErrTimeout, err)
264+
265+
// it should not hang
266+
q.Dispose()
267+
268+
_, err = q.Poll(1, time.Millisecond)
269+
assert.IsType(t, ErrDisposed, err)
270+
}
271+
259272
func TestGetPutDisposed(t *testing.T) {
260273
q := New(10)
261274

0 commit comments

Comments
 (0)