From b4bf1c65b72fe68f59fb411b26f5875d1ca22b54 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Mon, 9 Feb 2015 11:37:56 +0000 Subject: Fix descriptor leak in multi-target debugging Summary: When debugging two targets concurrently, the pseude terminal master fd from the first one would leak into the second. This fixes the problem by setting O_CLOEXEC on the master fd. Test included. Reviewers: clayborg, vharron Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D7466 llvm-svn: 228570 --- lldb/source/Utility/PseudoTerminal.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'lldb/source/Utility/PseudoTerminal.cpp') diff --git a/lldb/source/Utility/PseudoTerminal.cpp b/lldb/source/Utility/PseudoTerminal.cpp index e90955d37d4..55d4a9a1fc1 100644 --- a/lldb/source/Utility/PseudoTerminal.cpp +++ b/lldb/source/Utility/PseudoTerminal.cpp @@ -239,7 +239,7 @@ PseudoTerminal::Fork (char *error_str, size_t error_len) error_str[0] = '\0'; pid_t pid = LLDB_INVALID_PROCESS_ID; - if (OpenFirstAvailableMaster (O_RDWR, error_str, error_len)) + if (OpenFirstAvailableMaster (O_RDWR | O_CLOEXEC, error_str, error_len)) { // Successfully opened our master pseudo terminal @@ -258,7 +258,8 @@ PseudoTerminal::Fork (char *error_str, size_t error_len) if (OpenSlave (O_RDWR, error_str, error_len)) { // Successfully opened slave - // We are done with the master in the child process so lets close it + + // Master FD should have O_CLOEXEC set, but let's close it just in case... CloseMasterFileDescriptor (); #if defined(TIOCSCTTY) -- cgit v1.2.3