Revert "sshdriver: Prevent timeout from deadlock" #1288
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This reverts commit b8f059f.
OpenSSH < 8.5 called with -f waits for the stderr pipe to be closed before forking. [1] fixes this behavior.
The labgrid commit to be reverted calls
communicate()
, relying on a timely fork. Affected OpenSSH versions now run into a TimeoutExpired exception oncommunicate()
leading to an ExecutionError being raised in labgrid.A
wait()
with timeout was used since the initial implementation [2]. We wanted to make sure that we don't depend on the state of the pipes, so use of wait() was intentional, as it directly covers the interesting cases:wait()
timeout)Reverting the problematic commit avoids the complexity of having to maintain two different ways to start SSH as suggested in [3].
If timeouts still occur after the revert, we should implement this suggestion [4].
Discussion that lead to this patch can be found in the PR introducing the problematic commit [5] as well as in [3].
The other commit [6] in the PR [5] has a similar approach for
labgrid.util.SSHConnection._start_own_master()
. It shouldn't be problematic though: The ssh process is not expected to fork as it is not called with -f.[1] openssh/openssh-portable@396d32f ("upstream: There are lots of place where we want to redirect stdin,")
[2] e4862fa ("SSHDriver: ControlMaster & Driver")
[3] #1278
[4] #1265 (comment)
[5] #1265
[6] f9ca024 ("ssh: Prevent timeout from deadlock")
Checklist
Fixes #1265
Closes #1278