mirror of
https://github.com/bluenviron/mediamtx
synced 2024-12-14 10:45:08 +00:00
fix memory leak caused by time.Timer
This commit is contained in:
parent
0495c1ed4b
commit
08823ddc92
@ -46,35 +46,34 @@ func (e *ExternalCmd) run() {
|
|||||||
defer close(e.done)
|
defer close(e.done)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
if !e.runInner() {
|
ok := func() bool {
|
||||||
|
ok := e.runInner()
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if !e.restart {
|
||||||
|
<-e.terminate
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
t := time.NewTimer(restartPause)
|
||||||
|
defer t.Stop()
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-t.C:
|
||||||
|
return true
|
||||||
|
case <-e.terminate:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
if !ok {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *ExternalCmd) runInner() bool {
|
func (e *ExternalCmd) runInner() bool {
|
||||||
ok := e.runInnerInner()
|
|
||||||
if !ok {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if !e.restart {
|
|
||||||
<-e.terminate
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
t := time.NewTimer(restartPause)
|
|
||||||
defer t.Stop()
|
|
||||||
|
|
||||||
select {
|
|
||||||
case <-t.C:
|
|
||||||
return true
|
|
||||||
case <-e.terminate:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *ExternalCmd) runInnerInner() bool {
|
|
||||||
var cmd *exec.Cmd
|
var cmd *exec.Cmd
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
// on Windows the shell is not used and command is started directly
|
// on Windows the shell is not used and command is started directly
|
||||||
|
@ -123,20 +123,25 @@ outer:
|
|||||||
func (s *Source) runInner() {
|
func (s *Source) runInner() {
|
||||||
defer close(s.innerDone)
|
defer close(s.innerDone)
|
||||||
|
|
||||||
outer:
|
|
||||||
for {
|
for {
|
||||||
ok := s.runInnerInner()
|
ok := func() bool {
|
||||||
|
ok := s.runInnerInner()
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
t := time.NewTimer(retryInterval)
|
||||||
|
defer t.Stop()
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-t.C:
|
||||||
|
return true
|
||||||
|
case <-s.innerTerminate:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}()
|
||||||
if !ok {
|
if !ok {
|
||||||
break outer
|
break
|
||||||
}
|
|
||||||
|
|
||||||
t := time.NewTimer(retryInterval)
|
|
||||||
defer t.Stop()
|
|
||||||
|
|
||||||
select {
|
|
||||||
case <-s.innerTerminate:
|
|
||||||
break outer
|
|
||||||
case <-t.C:
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -209,6 +214,7 @@ func (s *Source) runInnerInner() bool {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
timer := time.NewTimer(5 * time.Second)
|
timer := time.NewTimer(5 * time.Second)
|
||||||
|
defer timer.Stop()
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case <-confDone:
|
case <-confDone:
|
||||||
|
@ -127,20 +127,25 @@ outer:
|
|||||||
func (s *Source) runInner() {
|
func (s *Source) runInner() {
|
||||||
defer close(s.innerDone)
|
defer close(s.innerDone)
|
||||||
|
|
||||||
outer:
|
|
||||||
for {
|
for {
|
||||||
ok := s.runInnerInner()
|
ok := func() bool {
|
||||||
|
ok := s.runInnerInner()
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
t := time.NewTimer(retryInterval)
|
||||||
|
defer t.Stop()
|
||||||
|
|
||||||
|
select {
|
||||||
|
case <-t.C:
|
||||||
|
return true
|
||||||
|
case <-s.innerTerminate:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}()
|
||||||
if !ok {
|
if !ok {
|
||||||
break outer
|
break
|
||||||
}
|
|
||||||
|
|
||||||
t := time.NewTimer(retryInterval)
|
|
||||||
defer t.Stop()
|
|
||||||
|
|
||||||
select {
|
|
||||||
case <-s.innerTerminate:
|
|
||||||
break outer
|
|
||||||
case <-t.C:
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user