change locks
All checks were successful
Build and Publish / BuildAndDeploy (push) Successful in 4m18s
All checks were successful
Build and Publish / BuildAndDeploy (push) Successful in 4m18s
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user