mirror of
https://github.com/zhaojh329/rttys.git
synced 2026-02-27 09:53:21 +08: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() {
|
||||
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()
|
||||
|
||||
CloseConn()
|
||||
|
||||
Closed() bool
|
||||
}
|
||||
|
||||
@@ -135,6 +135,10 @@ func (dev *device) Closed() bool {
|
||||
return atomic.LoadUint32(&dev.closed) == 1
|
||||
}
|
||||
|
||||
func (dev *device) CloseConn() {
|
||||
dev.conn.Close()
|
||||
}
|
||||
|
||||
func (dev *device) Close() {
|
||||
if dev.Closed() {
|
||||
return
|
||||
@@ -144,7 +148,7 @@ func (dev *device) Close() {
|
||||
|
||||
log.Debug().Msgf("Device '%s' disconnected", dev.conn.RemoteAddr())
|
||||
|
||||
dev.conn.Close()
|
||||
dev.CloseConn()
|
||||
|
||||
close(dev.send)
|
||||
}
|
||||
|
||||
@@ -59,6 +59,10 @@ func (u *user) Closed() bool {
|
||||
return atomic.LoadUint32(&u.closed) == 1
|
||||
}
|
||||
|
||||
func (u *user) CloseConn() {
|
||||
u.conn.Close()
|
||||
}
|
||||
|
||||
func (u *user) Close() {
|
||||
if u.Closed() {
|
||||
return
|
||||
@@ -66,7 +70,8 @@ func (u *user) Close() {
|
||||
|
||||
atomic.StoreUint32(&u.closed, 1)
|
||||
|
||||
u.conn.Close()
|
||||
u.CloseConn()
|
||||
|
||||
close(u.send)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user