@@ -360,20 +360,28 @@ func NewStatusCodeValidator(reject []int) ResponseValidator {
360360 }
361361}
362362
363- // slice of masquerade sorted by last vetted time
364- type sortedFronts []Front
363+ // fronts sorted by last vetted time
364+ type sortedFronts struct {
365+ fronts []Front
366+ mu sync.RWMutex
367+ }
365368
366- var frontsMu sync.RWMutex
369+ func newSortedFronts (size int ) * sortedFronts {
370+ return & sortedFronts {
371+ fronts : make ([]Front , size ),
372+ mu : sync.RWMutex {},
373+ }
374+ }
367375
368- func (m sortedFronts ) Len () int { return len (m ) }
369- func (m sortedFronts ) Swap (i , j int ) { m [i ], m [j ] = m [j ], m [i ] }
370- func (m sortedFronts ) Less (i , j int ) bool {
371- if m [i ].lastSucceeded ().After (m [j ].lastSucceeded ()) {
376+ func (m * sortedFronts ) Len () int { return len (m . fronts ) }
377+ func (m * sortedFronts ) Swap (i , j int ) { m . fronts [i ], m . fronts [j ] = m . fronts [j ], m . fronts [i ] }
378+ func (m * sortedFronts ) Less (i , j int ) bool {
379+ if m . fronts [i ].lastSucceeded ().After (m . fronts [j ].lastSucceeded ()) {
372380 return true
373- } else if m [j ].lastSucceeded ().After (m [i ].lastSucceeded ()) {
381+ } else if m . fronts [j ].lastSucceeded ().After (m . fronts [i ].lastSucceeded ()) {
374382 return false
375383 } else {
376- return m [i ].getIpAddress () < m [j ].getIpAddress ()
384+ return m . fronts [i ].getIpAddress () < m . fronts [j ].getIpAddress ()
377385 }
378386}
379387
@@ -382,26 +390,27 @@ func (m *sortedFronts) sortedCopy() []Front {
382390 defer m .mu .Unlock ()
383391 c := make ([]Front , len (m .fronts ))
384392 copy (c , m .fronts )
385- sort .Sort (sortedFronts {fronts : c })
393+ sf := sortedFronts {fronts : c }
394+ sort .Sort (& sf )
386395 return c
387396}
388397
389- func (m * sortedFronts ) addFronts (fronts [] Front ) {
398+ func (m * sortedFronts ) addFronts (fronts * sortedFronts ) {
390399 // Add new masquerades to the existing masquerades slice, but add them at the beginning.
391400 m .mu .Lock ()
392401 defer m .mu .Unlock ()
393- m .fronts = append (fronts , m .fronts ... )
402+ m .fronts = append (fronts . fronts , m .fronts ... )
394403}
395404
396405func (m * sortedFronts ) size () int {
397- m .mu .Lock ()
398- defer m .mu .Unlock ()
406+ m .mu .RLock ()
407+ defer m .mu .RUnlock ()
399408 return len (m .fronts )
400409}
401410
402411func (m * sortedFronts ) frontAt (i int ) Front {
403- m .mu .Lock ()
404- defer m .mu .Unlock ()
412+ m .mu .RLock ()
413+ defer m .mu .RUnlock ()
405414 return m .fronts [i ]
406415}
407416
0 commit comments