plugin/file: Fix memory leak in Parse (#2194)
For zone files with more than 10,000 records, the goroutines and memory pinned by dns.ParseZone won't be released unless the tokens chan is drained. As Parse is called by (*Zone).Reload very frequently, this causes memory leaks and OOM conditions. Updates miekg/dns#786
This commit is contained in:
parent
3cef6674e9
commit
1847ef6bd3
1 changed files with 6 additions and 0 deletions
|
@ -121,6 +121,12 @@ func (s *serialErr) Error() string {
|
|||
// it returns an error indicating nothing was read.
|
||||
func Parse(f io.Reader, origin, fileName string, serial int64) (*Zone, error) {
|
||||
tokens := dns.ParseZone(f, dns.Fqdn(origin), fileName)
|
||||
defer func() {
|
||||
// Drain the tokens chan so that large zone files won't
|
||||
// leak goroutines and memory.
|
||||
for range tokens {
|
||||
}
|
||||
}()
|
||||
z := NewZone(origin, fileName)
|
||||
seenSOA := false
|
||||
for x := range tokens {
|
||||
|
|
Loading…
Add table
Reference in a new issue