Skip to content

Commit

Permalink
fixes #460 Possible race condition between Fini and PollEvent
Browse files Browse the repository at this point in the history
  • Loading branch information
gdamore committed May 16, 2021
1 parent 876e1fd commit 0bfa151
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 6 deletions.
10 changes: 6 additions & 4 deletions console_win.go
Expand Up @@ -41,6 +41,7 @@ type cScreen struct {
fini bool
vten bool
truecolor bool
running bool

w int
h int
Expand Down Expand Up @@ -267,12 +268,12 @@ func (s *cScreen) Fini() {

func (s *cScreen) disengage() {
s.Lock()
stopQ := s.stopQ
if stopQ == nil {
if !s.running {
s.Unlock()
return
}
s.stopQ = nil
s.running = false
stopQ := s.stopQ
procSetEvent.Call(uintptr(s.cancelflag))
close(stopQ)
s.Unlock()
Expand All @@ -293,7 +294,7 @@ func (s *cScreen) disengage() {
func (s *cScreen) engage() error {
s.Lock()
defer s.Unlock()
if s.stopQ != nil {
if s.running {
return errors.New("already engaged")
}
s.stopQ = make(chan struct{})
Expand All @@ -305,6 +306,7 @@ func (s *cScreen) engage() error {
if cf == uintptr(0) {
return e
}
s.running = true
s.cancelflag = syscall.Handle(cf)
s.enableMouse(s.mouseEnabled)

Expand Down
10 changes: 8 additions & 2 deletions tscreen.go
Expand Up @@ -125,6 +125,7 @@ type tScreen struct {
disablePaste string
saved *term.State
stopQ chan struct{}
running bool
wg sync.WaitGroup
mouseFlags MouseFlags
pasteEnabled bool
Expand Down Expand Up @@ -1601,12 +1602,13 @@ func (t *tScreen) engage() error {
if t.tty == nil {
return ErrNoScreen
}
if t.stopQ != nil {
if t.running {
return errors.New("already engaged")
}
if err := t.tty.Start(); err != nil {
return err
}
t.running = true
if w, h, err := t.tty.WindowSize(); err == nil && w != 0 && h != 0 {
t.cells.Resize(w, h)
}
Expand Down Expand Up @@ -1635,8 +1637,12 @@ func (t *tScreen) engage() error {
func (t *tScreen) disengage() {

t.Lock()
if !t.running {
t.Unlock()
return
}
t.running = false
stopQ := t.stopQ
t.stopQ = nil
close(stopQ)
_ = t.tty.Drain()
t.Unlock()
Expand Down

0 comments on commit 0bfa151

Please sign in to comment.