rttys icon indicating copy to clipboard operation
rttys copied to clipboard

panic: send on closed channel

Open houzy opened this issue 2 years ago • 3 comments

Environment

rtty

  • arch: arm64
  • os: Debian 10
  • version: v8.0.0

rttys

  • arch: amd64
  • os: alpine
  • version: v4.0.1/v4.0.2

Description

服务端时不时崩溃重启,后面贴上两个报错信息

goroutine 49 [running]:
main.(*device).WriteMsg(0xc0016e23f0, 0x0, {0xc0027b1e40, 0x3, 0xb?})
        /home/runner/work/rttys/rttys/device.go:130 +0xff
main.(*broker).run(0xc000694000)
        /home/runner/work/rttys/rttys/broker.go:97 +0x755
created by main.runRttys
        /home/runner/work/rttys/rttys/main.go:72 +0x869
panic: send on closed channel

goroutine 14 [running]:
main.(*device).WriteMsg(0xc000b8a6c0, 0x0, {0xc000b59bf0, 0x3, 0x2?})
        /home/runner/work/rttys/rttys/device.go:130 +0xff
main.(*broker).run(0xc0003fb040)
        /home/runner/work/rttys/rttys/broker.go:97 +0x755
created by main.runRttys
        /home/runner/work/rttys/rttys/main.go:72 +0x869
panic: send on closed channel

houzy avatar Jul 06 '22 12:07 houzy

通过加了一些打印信息,发现这个问题是 device.go 的 func (dev *device) WriteMsg(typ int, data []byte) { 函数调用 dev.send <- append(b, data...) 的时候,dev.send 这个通道已经被关闭了,我在这个函数调用的地方加了一个判断规避这个问题,在调用通道前,先判断这个连接是不是已经断开了,但是我不确定这个解决办法是不是完美没有其他影响:

func (dev *device) WriteMsg(typ int, data []byte) {
	if atomic.LoadUint32(&dev.closed) == 1 {
		return
	}
        ......

houzy avatar Nov 08 '22 09:11 houzy

是在传输文件的时候崩溃的吗?

zhaojh329 avatar Nov 10 '22 09:11 zhaojh329

应该不是传输文件的时候崩溃,没有做传文件这样的操作

houzy avatar Nov 15 '22 05:11 houzy