Skip to content

Commit 57074db

Browse files
committed
Fix writing to closed channel.
1 parent b2452dd commit 57074db

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

internal/gateway/semtech/backend.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,16 @@ func NewBackend(bind string, onNew, onDelete func(lorawan.EUI64) error, configur
110110
// Close closes the backend.
111111
func (b *Backend) Close() error {
112112
b.Lock()
113+
b.closed = true
113114

114115
log.Info("gateway: closing gateway backend")
115-
b.closed = true
116-
close(b.udpSendChan)
117116

118117
if err := b.conn.Close(); err != nil {
119118
return errors.Wrap(err, "close udp listener error")
120119
}
121120

122121
log.Info("gateway: handling last packets")
123-
122+
close(b.udpSendChan)
124123
b.Unlock()
125124
b.wg.Wait()
126125
return nil
@@ -311,6 +310,13 @@ func (b *Backend) sendPackets() error {
311310
}
312311

313312
func (b *Backend) handlePacket(up udpPacket) error {
313+
b.RLock()
314+
defer b.RUnlock()
315+
316+
if b.closed {
317+
return nil
318+
}
319+
314320
pt, err := packets.GetPacketType(up.data)
315321
if err != nil {
316322
return err

0 commit comments

Comments
 (0)