Fix an infinite loop in rbssh when writing to a closed pipe.

Review Request #12861 — Created March 2, 2023 and submitted

Information

Review Board
release-5.0.x

Reviewers

When encountering an error writing to stdout or stderr, rbssh will try
again until successful, assuming that the pipe was just blocked.
However, if the pipe is closed, it just spins forever. This can happen
if a caller closes stdout/stderr before all output has been exhausted.

This change fixes that to listen for a closed pipe, and just gives up on
writing.

It also removes the new addition of a sleep call, which would have made
sense when polling, but not when blocking on output. It just caused
rbssh to be slower.

All unit tests passed.

Ran through a reproduction case that resulted in an infinite loop due
to a closed pipe. Verified it's been fixed.

Summary ID
Fix an infinite loop in rbssh when writing to a closed pipe.
When encountering an error writing to stdout or stderr, rbssh will try again until successful, assuming that the pipe was just blocked. However, if the pipe is closed, it just spins forever. This can happen if a caller closes stdout/stderr before all output has been exhausted. This change fixes that to listen for a closed pipe, and just gives up on writing. It also removes the new addition of a sleep call, which would have made sense when polling, but not when blocking on output. It just caused rbssh to be slower.
8203cf2682474d88c58c7bfe5d6df764bc964581
david
  1. Ship It!
  2. 
      
maubin
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-5.0.x (c831a1c)