# HG changeset patch # User John W. Eaton # Date 1606936935 18000 # Node ID 118b38c17805b08219e21d115a6a6379e3b7f127 # Parent 77ba9dfe5b29952681590a48c613a4b65aa25be9 also restore stdin and stdout in QUnixTerminalImpl destructor * QUnixTerminalImpl.h, QUnixTerminalImpl.cpp (QUnixTerminalImpl::fdstdin, QUnixTerminalImpl::fdstdout): New data members. (QUnixTerminalImpl::connectToPty): Save stdin and stdout file numbers. (QUnixTerminalImpl::~QUnixTerminalImpl): Restore stdin and stdout. diff -r 77ba9dfe5b29 -r 118b38c17805 libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp --- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp Wed Dec 02 15:00:45 2020 -0500 +++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.cpp Wed Dec 02 14:22:15 2020 -0500 @@ -107,8 +107,12 @@ void QUnixTerminalImpl::connectToPty() { - // Store the file descriptor associated with the STDERR stream onto - // another temporary file descriptor for reconnect in the destructor. + // Store the file descriptor associated with the STDIN, STDOUT, and + // STDERR streams onto another temporary file descriptor for + // reconnect in the destructor. + + fdstdin = dup (STDIN_FILENO); + fdstdout = dup (STDOUT_FILENO); fdstderr = dup (STDERR_FILENO); int fds = m_kpty->slaveFd(); @@ -136,7 +140,11 @@ delete m_kpty; delete m_terminalView; - // Restore stderr so that any errors at exit might appear somewhere. + // Restore STDIN, STDOUT, and STDERR so that I/O at exit will work + // as expected. + + dup2 (fdstdin, STDIN_FILENO); + dup2 (fdstdout, STDOUT_FILENO); dup2 (fdstderr, STDERR_FILENO); emit destroyed(); diff -r 77ba9dfe5b29 -r 118b38c17805 libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h --- a/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h Wed Dec 02 15:00:45 2020 -0500 +++ b/libgui/qterminal/libqterminal/unix/QUnixTerminalImpl.h Wed Dec 02 14:22:15 2020 -0500 @@ -31,6 +31,8 @@ { Q_OBJECT + int fdstdin; + int fdstdout; int fdstderr; public: