diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/Support/Signals.h | 11 | ||||
-rw-r--r-- | llvm/lib/Support/Unix/Signals.inc | 14 | ||||
-rw-r--r-- | llvm/lib/Support/Windows/Signals.inc | 3 | ||||
-rw-r--r-- | llvm/unittests/Support/CMakeLists.txt | 1 | ||||
-rw-r--r-- | llvm/unittests/Support/SignalsTest.cpp | 54 |
5 files changed, 1 insertions, 82 deletions
diff --git a/llvm/include/llvm/Support/Signals.h b/llvm/include/llvm/Support/Signals.h index a4f1fad22dd..a6b215a2431 100644 --- a/llvm/include/llvm/Support/Signals.h +++ b/llvm/include/llvm/Support/Signals.h @@ -84,17 +84,6 @@ namespace sys { /// function. Note also that the handler may be executed on a different /// thread on some platforms. void SetInfoSignalFunction(void (*Handler)()); - - /// Registers a function to be called when a "pipe" signal is delivered to - /// the process. - /// - /// The "pipe" signal typically indicates a failed write to a pipe (SIGPIPE). - /// The default installed handler calls `exit(EX_IOERR)`, causing the process - /// to immediately exit with an IO error exit code. - /// - /// This function is only applicable on POSIX systems. - void SetPipeSignalFunction(void (*Handler)()); - } // End sys namespace } // End llvm namespace diff --git a/llvm/lib/Support/Unix/Signals.inc b/llvm/lib/Support/Unix/Signals.inc index 5e0cde4a81e..be05eabfb2e 100644 --- a/llvm/lib/Support/Unix/Signals.inc +++ b/llvm/lib/Support/Unix/Signals.inc @@ -82,18 +82,12 @@ using namespace llvm; static RETSIGTYPE SignalHandler(int Sig); // defined below. static RETSIGTYPE InfoSignalHandler(int Sig); // defined below. -static void DefaultPipeSignalFunction() { - exit(EX_IOERR); -} - using SignalHandlerFunctionType = void (*)(); /// The function to call if ctrl-c is pressed. static std::atomic<SignalHandlerFunctionType> InterruptFunction = ATOMIC_VAR_INIT(nullptr); static std::atomic<SignalHandlerFunctionType> InfoSignalFunction = ATOMIC_VAR_INIT(nullptr); -static std::atomic<SignalHandlerFunctionType> PipeSignalFunction = - ATOMIC_VAR_INIT(DefaultPipeSignalFunction); namespace { /// Signal-safe removal of files. @@ -369,8 +363,7 @@ static RETSIGTYPE SignalHandler(int Sig) { // Send a special return code that drivers can check for, from sysexits.h. if (Sig == SIGPIPE) - if (SignalHandlerFunctionType CurrentPipeFunction = PipeSignalFunction) - CurrentPipeFunction(); + exit(EX_IOERR); raise(Sig); // Execute the default handler. return; @@ -410,11 +403,6 @@ void llvm::sys::SetInfoSignalFunction(void (*Handler)()) { RegisterHandlers(); } -void llvm::sys::SetPipeSignalFunction(void (*Handler)()) { - PipeSignalFunction.exchange(Handler); - RegisterHandlers(); -} - // The public API bool llvm::sys::RemoveFileOnSignal(StringRef Filename, std::string* ErrMsg) { diff --git a/llvm/lib/Support/Windows/Signals.inc b/llvm/lib/Support/Windows/Signals.inc index d962daf7934..6a820ef22b1 100644 --- a/llvm/lib/Support/Windows/Signals.inc +++ b/llvm/lib/Support/Windows/Signals.inc @@ -560,9 +560,6 @@ void llvm::sys::SetInfoSignalFunction(void (*Handler)()) { // Unimplemented. } -void llvm::sys::SetPipeSignalFunction(void (*Handler)()) { - // Unimplemented. -} /// Add a function to be called when a signal is delivered to the process. The /// handler can have a cookie passed to it to identify what instance of the diff --git a/llvm/unittests/Support/CMakeLists.txt b/llvm/unittests/Support/CMakeLists.txt index 385142278e4..161891517cf 100644 --- a/llvm/unittests/Support/CMakeLists.txt +++ b/llvm/unittests/Support/CMakeLists.txt @@ -58,7 +58,6 @@ add_llvm_unittest(SupportTests ReverseIterationTest.cpp ReplaceFileTest.cpp ScaledNumberTest.cpp - SignalsTest.cpp SourceMgrTest.cpp SpecialCaseListTest.cpp StringPool.cpp diff --git a/llvm/unittests/Support/SignalsTest.cpp b/llvm/unittests/Support/SignalsTest.cpp deleted file mode 100644 index 8c595c203ae..00000000000 --- a/llvm/unittests/Support/SignalsTest.cpp +++ /dev/null @@ -1,54 +0,0 @@ -//========- unittests/Support/SignalsTest.cpp - Signal handling test =========// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#if !defined(_WIN32) -#include <unistd.h> -#include <sysexits.h> -#include <signal.h> -#endif // !defined(_WIN32) - -#include "llvm/Support/Signals.h" - -#include "gtest/gtest.h" - -using namespace llvm; - -#if !defined(_WIN32) -TEST(SignalTest, IgnoreMultipleSIGPIPEs) { - // Ignore SIGPIPE. - signal(SIGPIPE, SIG_IGN); - - // Disable exit-on-SIGPIPE. - sys::SetPipeSignalFunction(nullptr); - - // Create unidirectional read/write pipes. - int fds[2]; - int err = pipe(fds); - if (err != 0) - return; // If we can't make pipes, this isn't testing anything. - - // Close the read pipe. - close(fds[0]); - - // Attempt to write to the write pipe. Currently we're asserting that the - // write fails, which isn't great. - // - // What we really want is a death test that checks that this block exits - // with a special exit "success" code, as opposed to unexpectedly exiting due - // to a kill-by-SIGNAL or due to the default SIGPIPE handler. - // - // Unfortunately llvm's unit tests aren't set up to support death tests well. - // For one, death tests are flaky in a multithreaded context. And sigactions - // inherited from llvm-lit interfere with what's being tested. - const void *buf = (const void *)&fds; - err = write(fds[1], buf, 1); - ASSERT_EQ(err, -1); - err = write(fds[1], buf, 1); - ASSERT_EQ(err, -1); -} -#endif // !defined(_WIN32) |