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:
Jianhui Zhao
2025-04-25 16:03:56 +08:00
parent 3840811605
commit 9dfc856b74
4 changed files with 15 additions and 3 deletions
+2 -1
View File
@@ -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()
}
})
+2
View File
@@ -12,5 +12,7 @@ type Client interface {
Close()
CloseConn()
Closed() bool
}
+5 -1
View File
@@ -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)
}
+6 -1
View File
@@ -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)
}