mirror of
https://github.com/gl-inet/glkvm-cloud.git
synced 2026-09-19 09:05:59 +00:00
fix: Fix panic: send on closed channel
```
device broker
------------------------------------------------------
dev.br.register <- dev
dev.br.unregister <- dev
handle unregister
c.Close()
handle register
c.WriteMsg(msgTypeRegister, append([]byte{err}, msg...))
dev.send <- append(b, data...)
```
Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>
This commit is contained in:
@@ -66,6 +66,10 @@ func (br *broker) run() {
|
||||
for {
|
||||
select {
|
||||
case c := <-br.register:
|
||||
if c.Closed() {
|
||||
break
|
||||
}
|
||||
|
||||
devid := c.DeviceID()
|
||||
|
||||
if c.IsDevice() {
|
||||
|
||||
@@ -11,4 +11,6 @@ type Client interface {
|
||||
IsDevice() bool
|
||||
|
||||
Close()
|
||||
|
||||
Closed() bool
|
||||
}
|
||||
|
||||
@@ -131,10 +131,15 @@ func (dev *device) WriteMsg(typ int, data []byte) {
|
||||
dev.send <- append(b, data...)
|
||||
}
|
||||
|
||||
func (dev *device) Closed() bool {
|
||||
return atomic.LoadUint32(&dev.closed) == 1
|
||||
}
|
||||
|
||||
func (dev *device) Close() {
|
||||
if atomic.LoadUint32(&dev.closed) == 1 {
|
||||
if dev.Closed() {
|
||||
return
|
||||
}
|
||||
|
||||
atomic.StoreUint32(&dev.closed, 1)
|
||||
|
||||
log.Debug().Msgf("Device '%s' disconnected", dev.conn.RemoteAddr())
|
||||
|
||||
@@ -55,10 +55,15 @@ func (u *user) WriteMsg(typ int, data []byte) {
|
||||
}
|
||||
}
|
||||
|
||||
func (u *user) Closed() bool {
|
||||
return atomic.LoadUint32(&u.closed) == 1
|
||||
}
|
||||
|
||||
func (u *user) Close() {
|
||||
if atomic.LoadUint32(&u.closed) == 1 {
|
||||
if u.Closed() {
|
||||
return
|
||||
}
|
||||
|
||||
atomic.StoreUint32(&u.closed, 1)
|
||||
|
||||
u.conn.Close()
|
||||
|
||||
Reference in New Issue
Block a user