Closed coder-free closed 11 months ago
6cfc25309e35d2c9873864a8b04fffa884a8b4e9
macOS
你好,我使用类似于这样的方式启动 tun2socks,在取消阻塞后 engine.Stop() 被调用的时候卡住了
engine.Stop()
Start() { var key = new(engine.Key) log := "info" if len(logLevel) > 0 { log = logLevel } key.Proxy = proxy key.LogLevel = log key.MTU = mtu key.TCPReceiveBufferSize = "131072" key.TCPSendBufferSize = "131072" engine.Insert(key) engine.Start() defer engine.Stop() //阻塞 } Stop() { //取消阻塞 }
具体来说卡在了 gvisor stack 的 wait 方法上:
func stop() (err error) { log.Errorf("stop 1.") _engineMu.Lock() log.Errorf("stop 2.") if _defaultDevice != nil { log.Errorf("stop 3.") err = _defaultDevice.Close() log.Errorf("stop 4: %v", err) } if _defaultStack != nil { log.Errorf("stop 5.") _defaultStack.Close() log.Errorf("stop 6.") _defaultStack.Wait() log.Errorf("stop 7.") } _engineMu.Unlock() log.Errorf("stop 8.") return err }
stop 6 被打印出来,但是 stop 7 一直未出现。
stop 6
stop 7
另外,key里面没有device,我是自己创建了一个 io.ReadWriter 来模拟 device 提供数据的读写接口。 像下面这样创建 device:
io.ReadWriter
func open(mtu uint32, rw io.ReadWriter) (device.Device, error) { f := &FD{mtu: mtu} ep, err := iobased.New(rw, mtu, 0) if err != nil { return nil, fmt.Errorf("create endpoint: %w", err) } f.LinkEndpoint = ep return f, nil }
No response
This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days
Verify steps
Version
6cfc25309e35d2c9873864a8b04fffa884a8b4e9
What OS are you seeing the problem on?
macOS
Description
你好,我使用类似于这样的方式启动 tun2socks,在取消阻塞后
engine.Stop()
被调用的时候卡住了具体来说卡在了 gvisor stack 的 wait 方法上:
stop 6
被打印出来,但是stop 7
一直未出现。另外,key里面没有device,我是自己创建了一个
io.ReadWriter
来模拟 device 提供数据的读写接口。 像下面这样创建 device:CLI or Config
No response
Logs
No response
How to Reproduce
No response