Files
Ant-Browser/backend/internal/proxy/singbox_bridge_process.go

41 lines
758 B
Go

package proxy
func (bridge *SingBoxBridge) startExitWatcher() {
if bridge == nil || bridge.Cmd == nil {
return
}
if bridge.ExitDone == nil {
bridge.ExitDone = make(chan struct{})
}
bridge.waitOnce.Do(func() {
go func() {
err := bridge.Cmd.Wait()
bridge.exitMu.Lock()
bridge.ExitErr = err
bridge.exitMu.Unlock()
close(bridge.ExitDone)
}()
})
}
func (bridge *SingBoxBridge) waitExit() error {
if bridge == nil || bridge.Cmd == nil {
return nil
}
bridge.startExitWatcher()
if bridge.ExitDone == nil {
return nil
}
<-bridge.ExitDone
return bridge.exitErr()
}
func (bridge *SingBoxBridge) exitErr() error {
if bridge == nil {
return nil
}
bridge.exitMu.Lock()
defer bridge.exitMu.Unlock()
return bridge.ExitErr
}