diff --git a/main.go b/main.go index af51ba98..c730863a 100644 --- a/main.go +++ b/main.go @@ -248,25 +248,6 @@ func newProgram(args []string, stdin io.Reader) (*program, error) { return nil, err } - if p.metrics != nil { - go p.metrics.run() - } - - if p.pprof != nil { - go p.pprof.run() - } - - if _, ok := conf.protocolsParsed[gortsplib.StreamProtocolUdp]; ok { - go p.serverRtp.run() - go p.serverRtcp.run() - } - - go p.serverRtsp.run() - - for _, p := range p.paths { - p.onInit() - } - go p.run() return p, nil @@ -285,6 +266,28 @@ func (p *program) log(format string, args ...interface{}) { } func (p *program) run() { + if p.metrics != nil { + go p.metrics.run() + } + + if p.pprof != nil { + go p.pprof.run() + } + + if p.serverRtp != nil { + go p.serverRtp.run() + } + + if p.serverRtcp != nil { + go p.serverRtcp.run() + } + + go p.serverRtsp.run() + + for _, p := range p.paths { + p.onInit() + } + checkPathsTicker := time.NewTicker(5 * time.Second) defer checkPathsTicker.Stop() @@ -520,8 +523,11 @@ outer: p.serverRtsp.close() - if _, ok := p.conf.protocolsParsed[gortsplib.StreamProtocolUdp]; ok { + if p.serverRtcp != nil { p.serverRtcp.close() + } + + if p.serverRtp != nil { p.serverRtp.close() } @@ -534,6 +540,10 @@ outer: p.metrics.close() } + if p.pprof != nil { + p.pprof.close() + } + if p.logFile != nil { p.logFile.Close() } diff --git a/pprof.go b/pprof.go index 93180b8d..19185809 100644 --- a/pprof.go +++ b/pprof.go @@ -1,6 +1,7 @@ package main import ( + "context" "net" "net/http" _ "net/http/pprof" @@ -39,3 +40,7 @@ func (pp *pprof) run() { panic(err) } } + +func (pp *pprof) close() { + pp.server.Shutdown(context.Background()) +}