Merge pull request #22979 from hashicorp/jbardin/ssh-reconnect

copy client pointer for keep-alive loop
This commit is contained in:
James Bardin 2019-10-02 15:03:40 -04:00 committed by GitHub
commit 38b69c9784
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 1 deletions

View File

@ -235,6 +235,10 @@ func (c *Communicator) Connect(o terraform.UIOutput) (err error) {
// Start a keepalive goroutine to help maintain the connection for
// long-running commands.
log.Printf("[DEBUG] starting ssh KeepAlives")
// We want a local copy of the ssh client pointer, so that a reconnect
// doesn't race with the running keep-alive loop.
sshClient := c.client
go func() {
defer cancelKeepAlive()
// Along with the KeepAlives generating packets to keep the tcp
@ -249,7 +253,7 @@ func (c *Communicator) Connect(o terraform.UIOutput) (err error) {
for {
select {
case <-t.C:
_, _, err := c.client.SendRequest("keepalive@terraform.io", true, nil)
_, _, err := sshClient.SendRequest("keepalive@terraform.io", true, nil)
respCh <- err
case <-ctx.Done():
return