0
0

Merge pull request #465 from steveyen/cleanup-when-PrefixSearcher-error

close resources when we encounter an error on PrefixSearcher initialization
This commit is contained in:
Marty Schoch 2016-10-12 13:39:28 +02:00 committed by GitHub
commit b76cbc805e

View File

@ -36,11 +36,19 @@ func NewTermPrefixSearcher(indexReader index.IndexReader, prefix string, field s
// enumerate all the terms in the range // enumerate all the terms in the range
qsearchers := make([]search.Searcher, 0, 25) qsearchers := make([]search.Searcher, 0, 25)
qsearchersClose := func() {
for _, searcher := range qsearchers {
_ = searcher.Close()
}
}
tfd, err := fieldDict.Next() tfd, err := fieldDict.Next()
for err == nil && tfd != nil { for err == nil && tfd != nil {
var qsearcher *TermSearcher var qsearcher *TermSearcher
qsearcher, err = NewTermSearcher(indexReader, string(tfd.Term), field, 1.0, explain) qsearcher, err = NewTermSearcher(indexReader, string(tfd.Term), field, 1.0, explain)
if err != nil { if err != nil {
qsearchersClose()
_ = fieldDict.Close()
return nil, err return nil, err
} }
qsearchers = append(qsearchers, qsearcher) qsearchers = append(qsearchers, qsearcher)
@ -49,12 +57,14 @@ func NewTermPrefixSearcher(indexReader index.IndexReader, prefix string, field s
err = fieldDict.Close() err = fieldDict.Close()
if err != nil { if err != nil {
qsearchersClose()
return nil, err return nil, err
} }
// build disjunction searcher of these ranges // build disjunction searcher of these ranges
searcher, err := NewDisjunctionSearcher(indexReader, qsearchers, 0, explain) searcher, err := NewDisjunctionSearcher(indexReader, qsearchers, 0, explain)
if err != nil { if err != nil {
qsearchersClose()
return nil, err return nil, err
} }
@ -66,6 +76,7 @@ func NewTermPrefixSearcher(indexReader index.IndexReader, prefix string, field s
searcher: searcher, searcher: searcher,
}, nil }, nil
} }
func (s *TermPrefixSearcher) Count() uint64 { func (s *TermPrefixSearcher) Count() uint64 {
return s.searcher.Count() return s.searcher.Count()
} }