mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-08-06 22:33:07 +02:00
Make prepareConversionArrays a little more concurrency safe
I have seen cases where during a rebase (two nonModelItems) all entries in viewIndicesByModelIndex beyond the second nonModelItem were off by 4 rather than 2 as I would expect. The only explanation I have for this is that the function was called concurrently. Improve this by working on a local variable and only assign to self at the end; this is not a real fix for the concurrency issue of course, but it makes it much less likely to be a problem in practice.
This commit is contained in:
@ -99,17 +99,19 @@ func (self *ListRenderer) renderLines(startIdx int, endIdx int) string {
|
|||||||
|
|
||||||
func (self *ListRenderer) prepareConversionArrays(nonModelItems []*NonModelItem) {
|
func (self *ListRenderer) prepareConversionArrays(nonModelItems []*NonModelItem) {
|
||||||
self.numNonModelItems = len(nonModelItems)
|
self.numNonModelItems = len(nonModelItems)
|
||||||
self.viewIndicesByModelIndex = lo.Range(self.list.Len() + 1)
|
viewIndicesByModelIndex := lo.Range(self.list.Len() + 1)
|
||||||
self.modelIndicesByViewIndex = lo.Range(self.list.Len() + 1)
|
modelIndicesByViewIndex := lo.Range(self.list.Len() + 1)
|
||||||
offset := 0
|
offset := 0
|
||||||
for _, item := range nonModelItems {
|
for _, item := range nonModelItems {
|
||||||
for i := item.Index; i <= self.list.Len(); i++ {
|
for i := item.Index; i <= self.list.Len(); i++ {
|
||||||
self.viewIndicesByModelIndex[i]++
|
viewIndicesByModelIndex[i]++
|
||||||
}
|
}
|
||||||
self.modelIndicesByViewIndex = slices.Insert(
|
modelIndicesByViewIndex = slices.Insert(
|
||||||
self.modelIndicesByViewIndex, item.Index+offset, self.modelIndicesByViewIndex[item.Index+offset])
|
modelIndicesByViewIndex, item.Index+offset, modelIndicesByViewIndex[item.Index+offset])
|
||||||
offset++
|
offset++
|
||||||
}
|
}
|
||||||
|
self.viewIndicesByModelIndex = viewIndicesByModelIndex
|
||||||
|
self.modelIndicesByViewIndex = modelIndicesByViewIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *ListRenderer) insertNonModelItems(
|
func (self *ListRenderer) insertNonModelItems(
|
||||||
|
Reference in New Issue
Block a user