mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-08-09 09:22:48 +03:00
Use readLines channel only for command tasks
And only while the task is running. This avoids accumulating lots of blocked goroutines when scrolling a view down more than 1024 times (the capacity of the readLines channel).
This commit is contained in:
@@ -91,16 +91,18 @@ func NewViewBufferManager(
|
|||||||
beforeStart: beforeStart,
|
beforeStart: beforeStart,
|
||||||
refreshView: refreshView,
|
refreshView: refreshView,
|
||||||
onEndOfInput: onEndOfInput,
|
onEndOfInput: onEndOfInput,
|
||||||
readLines: make(chan LinesToRead, 1024),
|
readLines: nil,
|
||||||
onNewKey: onNewKey,
|
onNewKey: onNewKey,
|
||||||
newGocuiTask: newGocuiTask,
|
newGocuiTask: newGocuiTask,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *ViewBufferManager) ReadLines(n int) {
|
func (self *ViewBufferManager) ReadLines(n int) {
|
||||||
go utils.Safe(func() {
|
if self.readLines != nil {
|
||||||
self.readLines <- LinesToRead{Total: n, InitialRefreshAfter: -1}
|
go utils.Safe(func() {
|
||||||
})
|
self.readLines <- LinesToRead{Total: n, InitialRefreshAfter: -1}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *ViewBufferManager) NewCmdTask(start func() (*exec.Cmd, io.Reader), prefix string, linesToRead LinesToRead, onDoneFn func()) func(TaskOpts) error {
|
func (self *ViewBufferManager) NewCmdTask(start func() (*exec.Cmd, io.Reader), prefix string, linesToRead LinesToRead, onDoneFn func()) func(TaskOpts) error {
|
||||||
@@ -166,7 +168,6 @@ func (self *ViewBufferManager) NewCmdTask(start func() (*exec.Cmd, io.Reader), p
|
|||||||
|
|
||||||
loadingMutex := deadlock.Mutex{}
|
loadingMutex := deadlock.Mutex{}
|
||||||
|
|
||||||
// not sure if it's the right move to redefine this or not
|
|
||||||
self.readLines = make(chan LinesToRead, 1024)
|
self.readLines = make(chan LinesToRead, 1024)
|
||||||
|
|
||||||
scanner := bufio.NewScanner(r)
|
scanner := bufio.NewScanner(r)
|
||||||
@@ -274,6 +275,8 @@ func (self *ViewBufferManager) NewCmdTask(start func() (*exec.Cmd, io.Reader), p
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.readLines = nil
|
||||||
|
|
||||||
refreshViewIfStale()
|
refreshViewIfStale()
|
||||||
|
|
||||||
if err := cmd.Wait(); err != nil {
|
if err := cmd.Wait(); err != nil {
|
||||||
@@ -349,6 +352,8 @@ func (self *ViewBufferManager) NewTask(f func(TaskOpts) error, key string) error
|
|||||||
go utils.Safe(func() {
|
go utils.Safe(func() {
|
||||||
defer completeGocuiTask()
|
defer completeGocuiTask()
|
||||||
|
|
||||||
|
self.readLines = nil
|
||||||
|
|
||||||
self.taskIDMutex.Lock()
|
self.taskIDMutex.Lock()
|
||||||
self.newTaskID++
|
self.newTaskID++
|
||||||
taskID := self.newTaskID
|
taskID := self.newTaskID
|
||||||
|
Reference in New Issue
Block a user