summaryrefslogtreecommitdiffstats
path: root/pkg/tasks/tasks.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2020-10-07 21:19:38 +1100
committerJesse Duffield <jessedduffield@gmail.com>2020-10-10 00:23:01 +1100
commit79e59d5460d838203bc79ac86c0ba529305ba2a9 (patch)
tree7a7d6c48440f02945599606494ac64424d274f58 /pkg/tasks/tasks.go
parentba4c3e5bc475a7819fd954985105073ba239bf9e (diff)
add some safe goroutines
WIP
Diffstat (limited to 'pkg/tasks/tasks.go')
-rw-r--r--pkg/tasks/tasks.go29
1 files changed, 15 insertions, 14 deletions
diff --git a/pkg/tasks/tasks.go b/pkg/tasks/tasks.go
index f6e3432f2..5854b4f46 100644
--- a/pkg/tasks/tasks.go
+++ b/pkg/tasks/tasks.go
@@ -10,6 +10,7 @@ import (
"time"
"github.com/jesseduffield/lazygit/pkg/commands/oscommands"
+ "github.com/jesseduffield/lazygit/pkg/utils"
"github.com/sirupsen/logrus"
)
@@ -41,14 +42,14 @@ func NewViewBufferManager(log *logrus.Entry, writer io.Writer, beforeStart func(
}
func (m *ViewBufferManager) ReadLines(n int) {
- go func() {
+ go utils.Safe(func() {
m.readLines <- n
- }()
+ })
}
func (m *ViewBufferManager) NewCmdTask(r io.Reader, cmd *exec.Cmd, prefix string, linesToRead int, onDone func()) func(chan struct{}) error {
return func(stop chan struct{}) error {
- go func() {
+ go utils.Safe(func() {
<-stop
if err := oscommands.Kill(cmd); err != nil {
if !strings.Contains(err.Error(), "process already finished") {
@@ -58,7 +59,7 @@ func (m *ViewBufferManager) NewCmdTask(r io.Reader, cmd *exec.Cmd, prefix string
if onDone != nil {
onDone()
}
- }()
+ })
loadingMutex := sync.Mutex{}
@@ -67,13 +68,13 @@ func (m *ViewBufferManager) NewCmdTask(r io.Reader, cmd *exec.Cmd, prefix string
done := make(chan struct{})
- go func() {
+ go utils.Safe(func() {
scanner := bufio.NewScanner(r)
scanner.Split(bufio.ScanLines)
loaded := false
- go func() {
+ go utils.Safe(func() {
ticker := time.NewTicker(time.Millisecond * 100)
defer ticker.Stop()
select {
@@ -88,7 +89,7 @@ func (m *ViewBufferManager) NewCmdTask(r io.Reader, cmd *exec.Cmd, prefix string
case <-stop:
return
}
- }()
+ })
outer:
for {
@@ -139,7 +140,7 @@ func (m *ViewBufferManager) NewCmdTask(r io.Reader, cmd *exec.Cmd, prefix string
}
close(done)
- }()
+ })
m.readLines <- linesToRead
@@ -157,10 +158,10 @@ func (t *ViewBufferManager) Close() {
c := make(chan struct{})
- go func() {
+ go utils.Safe(func() {
t.currentTask.Stop()
c <- struct{}{}
- }()
+ })
select {
case <-c:
@@ -175,7 +176,7 @@ func (t *ViewBufferManager) Close() {
// 2) string based, where the manager can also be asked to read more lines
func (m *ViewBufferManager) NewTask(f func(stop chan struct{}) error) error {
- go func() {
+ go utils.Safe(func() {
m.taskIDMutex.Lock()
m.newTaskId++
taskID := m.newTaskId
@@ -202,14 +203,14 @@ func (m *ViewBufferManager) NewTask(f func(stop chan struct{}) error) error {
f: f,
}
- go func() {
+ go utils.Safe(func() {
if err := f(stop); err != nil {
m.Log.Error(err) // might need an onError callback
}
close(notifyStopped)
- }()
- }()
+ })
+ })
return nil
}