Fix potential deadlock in ByParam

Fixes #11039
This commit is contained in:
Bjørn Erik Pedersen
2023-05-29 12:58:22 +02:00
parent d47225ce9e
commit 32585696be
4 changed files with 29 additions and 13 deletions

View File

@@ -161,7 +161,7 @@ var collatorStringSort = func(getString func(Page) string) func(p Pages) {
// Pages may be a mix of multiple languages, so we need to use the language
// for the currently rendered Site.
currentSite := p[0].Site().Current()
coll := langs.GetCollator(currentSite.Language())
coll := langs.GetCollator1(currentSite.Language())
coll.Lock()
defer coll.Unlock()
@@ -173,7 +173,7 @@ var collatorStringSort = func(getString func(Page) string) func(p Pages) {
var collatorStringCompare = func(getString func(Page) string, p1, p2 Page) int {
currentSite := p1.Site().Current()
coll := langs.GetCollator(currentSite.Language())
coll := langs.GetCollator1(currentSite.Language())
coll.Lock()
c := coll.CompareStrings(getString(p1), getString(p2))
coll.Unlock()
@@ -182,7 +182,9 @@ var collatorStringCompare = func(getString func(Page) string, p1, p2 Page) int {
var collatorStringLess = func(p Page) (less func(s1, s2 string) bool, close func()) {
currentSite := p.Site().Current()
coll := langs.GetCollator(currentSite.Language())
// Make sure to use the second collator to prevent deadlocks.
// See issue 11039.
coll := langs.GetCollator2(currentSite.Language())
coll.Lock()
return func(s1, s2 string) bool {
return coll.CompareStrings(s1, s2) < 1

View File

@@ -83,7 +83,7 @@ func (i Taxonomy) Alphabetical() OrderedTaxonomy {
return ia
}
currentSite := p.Site().Current()
coll := langs.GetCollator(currentSite.Language())
coll := langs.GetCollator1(currentSite.Language())
coll.Lock()
defer coll.Unlock()
name := func(i1, i2 *OrderedTaxonomyEntry) bool {