This commit is contained in:
Neil Alexander 2021-06-28 13:31:21 +01:00
parent 8fd878c75a
commit f9ab3f4b81
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -5,7 +5,7 @@ import (
) )
type fifoQueue struct { type fifoQueue struct {
frames []*inputTask tasks []*inputTask
count int count int
mutex sync.Mutex mutex sync.Mutex
notifs chan struct{} notifs chan struct{}
@ -18,16 +18,15 @@ func newFIFOQueue() *fifoQueue {
return q return q
} }
func (q *fifoQueue) push(frame *inputTask) bool { func (q *fifoQueue) push(frame *inputTask) {
q.mutex.Lock() q.mutex.Lock()
defer q.mutex.Unlock() defer q.mutex.Unlock()
q.frames = append(q.frames, frame) q.tasks = append(q.tasks, frame)
q.count++ q.count++
select { select {
case q.notifs <- struct{}{}: case q.notifs <- struct{}{}:
default: default:
} }
return true
} }
func (q *fifoQueue) pop() (*inputTask, bool) { func (q *fifoQueue) pop() (*inputTask, bool) {
@ -36,14 +35,14 @@ func (q *fifoQueue) pop() (*inputTask, bool) {
if q.count == 0 { if q.count == 0 {
return nil, false return nil, false
} }
frame := q.frames[0] frame := q.tasks[0]
q.frames[0] = nil q.tasks[0] = nil
q.frames = q.frames[1:] q.tasks = q.tasks[1:]
q.count-- q.count--
if q.count == 0 { if q.count == 0 {
// Force a GC of the underlying array, since it might have // Force a GC of the underlying array, since it might have
// grown significantly if the queue was hammered for some reason // grown significantly if the queue was hammered for some reason
q.frames = nil q.tasks = nil
} }
return frame, true return frame, true
} }
@ -51,7 +50,7 @@ func (q *fifoQueue) pop() (*inputTask, bool) {
func (q *fifoQueue) wait() <-chan struct{} { func (q *fifoQueue) wait() <-chan struct{} {
q.mutex.Lock() q.mutex.Lock()
defer q.mutex.Unlock() defer q.mutex.Unlock()
if q.count > 0 { if q.count > 0 && len(q.notifs) == 0 {
ch := make(chan struct{}) ch := make(chan struct{})
close(ch) close(ch)
return ch return ch