Merge "smart_status: move channel write outside lock to avoid deadlock"
diff --git a/ui/terminal/smart_status.go b/ui/terminal/smart_status.go
index efcfd43..6bdf140 100644
--- a/ui/terminal/smart_status.go
+++ b/ui/terminal/smart_status.go
@@ -170,6 +170,13 @@
}
func (s *smartStatusOutput) Flush() {
+ if s.tableMode {
+ // Stop the action table tick outside of the lock to avoid lock ordering issues between s.done and
+ // s.lock, the goroutine in startActionTableTick can get blocked on the lock and be unable to read
+ // from the channel.
+ s.stopActionTableTick()
+ }
+
s.lock.Lock()
defer s.lock.Unlock()
@@ -180,8 +187,6 @@
s.runningActions = nil
if s.tableMode {
- s.stopActionTableTick()
-
// Update the table after clearing runningActions to clear it
s.actionTable()