svn commit: r344545 - in vendor/lldb/dist-release_80: source/Host/common source/Host/openbsd unittests/Host

Dimitry Andric dim at FreeBSD.org
Mon Feb 25 19:07:58 UTC 2019


Author: dim
Date: Mon Feb 25 19:07:48 2019
New Revision: 344545
URL: https://svnweb.freebsd.org/changeset/base/344545

Log:
  Vendor import of lldb release_80 branch r354799:
  https://llvm.org/svn/llvm-project/lldb/branches/release_80@354799

Modified:
  vendor/lldb/dist-release_80/source/Host/common/MainLoop.cpp
  vendor/lldb/dist-release_80/source/Host/openbsd/Host.cpp
  vendor/lldb/dist-release_80/unittests/Host/MainLoopTest.cpp

Modified: vendor/lldb/dist-release_80/source/Host/common/MainLoop.cpp
==============================================================================
--- vendor/lldb/dist-release_80/source/Host/common/MainLoop.cpp	Mon Feb 25 19:07:45 2019	(r344544)
+++ vendor/lldb/dist-release_80/source/Host/common/MainLoop.cpp	Mon Feb 25 19:07:48 2019	(r344545)
@@ -108,8 +108,14 @@ Status MainLoop::RunImpl::Poll() {
   num_events = kevent(loop.m_kqueue, in_events.data(), in_events.size(),
                       out_events, llvm::array_lengthof(out_events), nullptr);
 
-  if (num_events < 0)
-    return Status("kevent() failed with error %d\n", num_events);
+  if (num_events < 0) {
+    if (errno == EINTR) {
+      // in case of EINTR, let the main loop run one iteration
+      // we need to zero num_events to avoid assertions failing
+      num_events = 0;
+    } else
+      return Status(errno, eErrorTypePOSIX);
+  }
   return Status();
 }
 

Modified: vendor/lldb/dist-release_80/source/Host/openbsd/Host.cpp
==============================================================================
--- vendor/lldb/dist-release_80/source/Host/openbsd/Host.cpp	Mon Feb 25 19:07:45 2019	(r344544)
+++ vendor/lldb/dist-release_80/source/Host/openbsd/Host.cpp	Mon Feb 25 19:07:48 2019	(r344545)
@@ -68,8 +68,7 @@ GetOpenBSDProcessArgs(const ProcessInstanceInfoMatch *
 
       cstr = data.GetCStr(&offset);
       if (cstr) {
-        process_info.GetExecutableFile().SetFile(cstr, false,
-                                                 FileSpec::Style::native);
+        process_info.GetExecutableFile().SetFile(cstr, FileSpec::Style::native);
 
         if (!(match_info_ptr == NULL ||
               NameMatches(

Modified: vendor/lldb/dist-release_80/unittests/Host/MainLoopTest.cpp
==============================================================================
--- vendor/lldb/dist-release_80/unittests/Host/MainLoopTest.cpp	Mon Feb 25 19:07:45 2019	(r344544)
+++ vendor/lldb/dist-release_80/unittests/Host/MainLoopTest.cpp	Mon Feb 25 19:07:48 2019	(r344545)
@@ -137,4 +137,28 @@ TEST_F(MainLoopTest, Signal) {
   ASSERT_TRUE(loop.Run().Success());
   ASSERT_EQ(1u, callback_count);
 }
+
+// Test that a signal which is not monitored by the MainLoop does not
+// cause a premature exit.
+TEST_F(MainLoopTest, UnmonitoredSignal) {
+  MainLoop loop;
+  Status error;
+  struct sigaction sa;
+  sa.sa_sigaction = [](int, siginfo_t *, void *) { };
+  sa.sa_flags = SA_SIGINFO; // important: no SA_RESTART
+  sigemptyset(&sa.sa_mask);
+  ASSERT_EQ(0, sigaction(SIGUSR2, &sa, nullptr));
+
+  auto handle = loop.RegisterSignal(SIGUSR1, make_callback(), error);
+  ASSERT_TRUE(error.Success());
+  std::thread killer([]() {
+    sleep(1);
+    kill(getpid(), SIGUSR2);
+    sleep(1);
+    kill(getpid(), SIGUSR1);
+  });
+  ASSERT_TRUE(loop.Run().Success());
+  killer.join();
+  ASSERT_EQ(1u, callback_count);
+}
 #endif


More information about the svn-src-all mailing list