chore(pty/ptytest): add sync.Once to close (#10220)

This commit is contained in:
Cian Johnston 2023-10-11 16:47:02 +01:00 committed by GitHub
parent ac623b4717
commit 98a076fb46
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 12 deletions

View File

@ -350,22 +350,28 @@ func (e *outExpecter) fatalf(reason string, format string, args ...interface{})
type PTY struct {
outExpecter
pty.PTY
closeOnce sync.Once
closeErr error
}
func (p *PTY) Close() error {
p.t.Helper()
pErr := p.PTY.Close()
if pErr != nil {
p.logf("PTY: Close failed: %v", pErr)
}
eErr := p.outExpecter.close("PTY close")
if eErr != nil {
p.logf("PTY: close expecter failed: %v", eErr)
}
if pErr != nil {
return pErr
}
return eErr
p.closeOnce.Do(func() {
pErr := p.PTY.Close()
if pErr != nil {
p.logf("PTY: Close failed: %v", pErr)
}
eErr := p.outExpecter.close("PTY close")
if eErr != nil {
p.logf("PTY: close expecter failed: %v", eErr)
}
if pErr != nil {
p.closeErr = pErr
return
}
p.closeErr = eErr
})
return p.closeErr
}
func (p *PTY) Attach(inv *clibase.Invocation) *PTY {