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