ybelkadi updated this revision to Diff 32529. ybelkadi added a comment. Yes, the test passes, but as PR19246 reported intermittent failures, I thought I'd wait for the results of the tests run by the bots.
Here is an updated patch also enabling the test. Could you please commit it if it's accepted? http://reviews.llvm.org/D12138 Files: source/Plugins/Process/Linux/NativeProcessLinux.cpp test/expression_command/call-restarts/TestCallThatRestarts.py Index: test/expression_command/call-restarts/TestCallThatRestarts.py =================================================================== --- test/expression_command/call-restarts/TestCallThatRestarts.py +++ test/expression_command/call-restarts/TestCallThatRestarts.py @@ -29,7 +29,6 @@ @dwarf_test @skipIfFreeBSD # llvm.org/pr19246: intermittent failure - @expectedFailureLinux("llvm.org/pr19246") @skipIfDarwin # llvm.org/pr19246: intermittent failure @skipIfWindows # Test relies on signals, unsupported on Windows def test_with_dwarf(self): Index: source/Plugins/Process/Linux/NativeProcessLinux.cpp =================================================================== --- source/Plugins/Process/Linux/NativeProcessLinux.cpp +++ source/Plugins/Process/Linux/NativeProcessLinux.cpp @@ -554,7 +554,8 @@ eDupStderrFailed, eChdirFailed, eExecFailed, - eSetGidFailed + eSetGidFailed, + eSetSigMaskFailed }; // Child process. @@ -629,6 +630,12 @@ } } + // Clear the signal mask to prevent the child from being affected by + // any masking done by the parent. + sigset_t set; + if (sigemptyset(&set) != 0 || pthread_sigmask(SIG_SETMASK, &set, nullptr) != 0) + exit(eSetSigMaskFailed); + // Execute. We should never return... execve(argv[0], const_cast<char *const *>(argv), @@ -686,6 +693,9 @@ case eSetGidFailed: error.SetErrorString("Child setgid failed."); break; + case eSetSigMaskFailed: + error.SetErrorString("Child failed to set signal mask."); + break; default: error.SetErrorString("Child returned unknown exit status."); break;
Index: test/expression_command/call-restarts/TestCallThatRestarts.py =================================================================== --- test/expression_command/call-restarts/TestCallThatRestarts.py +++ test/expression_command/call-restarts/TestCallThatRestarts.py @@ -29,7 +29,6 @@ @dwarf_test @skipIfFreeBSD # llvm.org/pr19246: intermittent failure - @expectedFailureLinux("llvm.org/pr19246") @skipIfDarwin # llvm.org/pr19246: intermittent failure @skipIfWindows # Test relies on signals, unsupported on Windows def test_with_dwarf(self): Index: source/Plugins/Process/Linux/NativeProcessLinux.cpp =================================================================== --- source/Plugins/Process/Linux/NativeProcessLinux.cpp +++ source/Plugins/Process/Linux/NativeProcessLinux.cpp @@ -554,7 +554,8 @@ eDupStderrFailed, eChdirFailed, eExecFailed, - eSetGidFailed + eSetGidFailed, + eSetSigMaskFailed }; // Child process. @@ -629,6 +630,12 @@ } } + // Clear the signal mask to prevent the child from being affected by + // any masking done by the parent. + sigset_t set; + if (sigemptyset(&set) != 0 || pthread_sigmask(SIG_SETMASK, &set, nullptr) != 0) + exit(eSetSigMaskFailed); + // Execute. We should never return... execve(argv[0], const_cast<char *const *>(argv), @@ -686,6 +693,9 @@ case eSetGidFailed: error.SetErrorString("Child setgid failed."); break; + case eSetSigMaskFailed: + error.SetErrorString("Child failed to set signal mask."); + break; default: error.SetErrorString("Child returned unknown exit status."); break;
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits