diff options
Diffstat (limited to 'source/Plugins/Process/POSIX/ProcessPOSIX.cpp')
| -rw-r--r-- | source/Plugins/Process/POSIX/ProcessPOSIX.cpp | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/source/Plugins/Process/POSIX/ProcessPOSIX.cpp b/source/Plugins/Process/POSIX/ProcessPOSIX.cpp index 0e5ab5a8d8b1..882fac75c9a0 100644 --- a/source/Plugins/Process/POSIX/ProcessPOSIX.cpp +++ b/source/Plugins/Process/POSIX/ProcessPOSIX.cpp @@ -252,7 +252,16 @@ ProcessPOSIX::DoLaunch (Module *module,      if (!error.Success())          return error; -    SetSTDIOFileDescriptor(m_monitor->GetTerminalFD()); +    int terminal = m_monitor->GetTerminalFD(); +    if (terminal >= 0) { +        // The reader thread will close the file descriptor when done, so we pass it a copy. +        int stdio = fcntl(terminal, F_DUPFD_CLOEXEC, 0); +        if (stdio == -1) { +            error.SetErrorToErrno(); +            return error; +        } +        SetSTDIOFileDescriptor(stdio); +    }      SetID(m_monitor->GetPID());      return error;  | 
