From d9a76d42fc7afc1a72b16e063930a5490bc6cc7f Mon Sep 17 00:00:00 2001 From: jerrylou Date: Mon, 10 Apr 2017 20:31:30 +0800 Subject: [PATCH] fix recover func Signed-off-by: jerrylou --- godns.go | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/godns.go b/godns.go index 07fc31d..3af621d 100644 --- a/godns.go +++ b/godns.go @@ -70,18 +70,6 @@ func main() { } func dnsLoop() { - defer func() { - if err := recover(); err != nil { - panicCount++ - log.Printf("Recovered in %v: %v\n", err, debug.Stack()) - fmt.Println(identifyPanic()) - log.Print(identifyPanic()) - if panicCount < PANIC_MAX { - log.Println("Got panic in goroutine, will start a new one... :", panicCount) - go dnsLoop() - } - } - }() for _, domain := range configuration.Domains { go DomainLoop(&domain) @@ -91,6 +79,20 @@ func dnsLoop() { } func DomainLoop(domain *Domain) { + defer func() { + if err := recover(); err != nil { + panicCount++ + log.Printf("Recovered in %v: %v\n", err, debug.Stack()) + fmt.Println(identifyPanic()) + log.Print(identifyPanic()) + if panicCount < PANIC_MAX { + log.Println("Got panic in goroutine, will start a new one... :", panicCount) + go DomainLoop(domain) + } else { + os.Exit(1) + } + } + }() for {