diff --git a/synced-pool.go b/synced-pool.go index f89447c..5faefb3 100644 --- a/synced-pool.go +++ b/synced-pool.go @@ -197,13 +197,14 @@ func NewPacketQueue(connection net.Conn) *PacketQueue { go func(queueTimer *time.Ticker) { for { <-queueTimer.C - queue.mu.RLock() + queue.mu.Lock() for i, packet := range queue.Packets { - if time.Since(packet.Added) > time.Second*5 { - queue.Packets = append(queue.Packets[:i], queue.Packets[i+1:]...) + if time.Since(packet.Added) < time.Second*3 { + queue.Packets = queue.Packets[i:] + break } } - queue.mu.RUnlock() + queue.mu.Unlock() } }(time.NewTicker(time.Second)) return queue @@ -211,22 +212,19 @@ func NewPacketQueue(connection net.Conn) *PacketQueue { func (p *PacketQueue) Expect(messageType uint16, timeToWait time.Duration) (*PacketWithData, error) { start := time.Now() + for { if time.Since(start) > timeToWait { return nil, fmt.Errorf("timeout waiting for message type %d", messageType) } - for i, packet := range p.Packets { + p.mu.RLock() + for _, packet := range p.Packets { if packet.MessageType == messageType && packet.Added.After(start) { - toReturn := PacketWithData{ - MessageType: packet.MessageType, - Data: packet.Data, - } - p.mu.Lock() - p.Packets = append(p.Packets[:i], p.Packets[i+1:]...) - p.mu.Unlock() - return &toReturn, nil + p.mu.RUnlock() + return &packet, nil } } + p.mu.RUnlock() time.Sleep(time.Millisecond * 5) } }