mirror of
https://github.com/gl-inet/glkvm-cloud.git
synced 2026-09-23 19:16:18 +00:00
fix: Fix potential panic issue
```
2025-04-24T06:59:56Z |INFO| New session: 81ee1ed4d12c3048620fbb2168c08257
2025-04-24T07:00:10Z |INFO| Delete session: 81ee1ed4d12c3048620fbb2168c08257
2025-04-24T07:00:17Z |INFO| New session: 427ce01b7f47a7ee8192cefdfa291c8f
2025-04-24T07:00:57Z |INFO| Delete session: 427ce01b7f47a7ee8192cefdfa291c8f
2025-04-24T07:01:55Z |INFO| New session: ffbfd5c596195c2bd43b8c0b6dc3d135
2025-04-24T07:01:57Z |ERRO| websocket: close sent
panic: send on closed channel
goroutine 33 [running]:
main.(*user).WriteMsg(0xc00037e680, 0x2, {0xc000188d10, 0xc, 0xc})
/home/runner/work/rttys/rttys/user.go:52 +0x8b
main.(*broker).run(0xc00035a000)
/home/runner/work/rttys/rttys/broker.go:227 +0xf34
created by main.runRttys in goroutine 1
/home/runner/work/rttys/rttys/main.go:86 +0x595
```
Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>
This commit is contained in:
@@ -147,7 +147,8 @@ func (br *broker) run() {
|
|||||||
|
|
||||||
time.AfterFunc(time.Second*3, func() {
|
time.AfterFunc(time.Second*3, func() {
|
||||||
if atomic.LoadUint32(&s.confirmed) == 0 {
|
if atomic.LoadUint32(&s.confirmed) == 0 {
|
||||||
c.Close()
|
log.Error().Msgf("Session '%s' confirm timeout", sid)
|
||||||
|
c.CloseConn()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -12,5 +12,7 @@ type Client interface {
|
|||||||
|
|
||||||
Close()
|
Close()
|
||||||
|
|
||||||
|
CloseConn()
|
||||||
|
|
||||||
Closed() bool
|
Closed() bool
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,6 +135,10 @@ func (dev *device) Closed() bool {
|
|||||||
return atomic.LoadUint32(&dev.closed) == 1
|
return atomic.LoadUint32(&dev.closed) == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dev *device) CloseConn() {
|
||||||
|
dev.conn.Close()
|
||||||
|
}
|
||||||
|
|
||||||
func (dev *device) Close() {
|
func (dev *device) Close() {
|
||||||
if dev.Closed() {
|
if dev.Closed() {
|
||||||
return
|
return
|
||||||
@@ -144,7 +148,7 @@ func (dev *device) Close() {
|
|||||||
|
|
||||||
log.Debug().Msgf("Device '%s' disconnected", dev.conn.RemoteAddr())
|
log.Debug().Msgf("Device '%s' disconnected", dev.conn.RemoteAddr())
|
||||||
|
|
||||||
dev.conn.Close()
|
dev.CloseConn()
|
||||||
|
|
||||||
close(dev.send)
|
close(dev.send)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,10 @@ func (u *user) Closed() bool {
|
|||||||
return atomic.LoadUint32(&u.closed) == 1
|
return atomic.LoadUint32(&u.closed) == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *user) CloseConn() {
|
||||||
|
u.conn.Close()
|
||||||
|
}
|
||||||
|
|
||||||
func (u *user) Close() {
|
func (u *user) Close() {
|
||||||
if u.Closed() {
|
if u.Closed() {
|
||||||
return
|
return
|
||||||
@@ -66,7 +70,8 @@ func (u *user) Close() {
|
|||||||
|
|
||||||
atomic.StoreUint32(&u.closed, 1)
|
atomic.StoreUint32(&u.closed, 1)
|
||||||
|
|
||||||
u.conn.Close()
|
u.CloseConn()
|
||||||
|
|
||||||
close(u.send)
|
close(u.send)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user