mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-28 09:59:20 -05:00
cmUVSignalHackRAII: Drop outdated and unused libuv SA_RESTART workaround
It is only needed for libuv < 1.19, but since commit c050d6a01e
(string(TIMESTAMP): add %f specifier for microseconds, 2022-01-27,
v3.23.0-rc1~59^2) we require libuv >= 1.28.
This commit is contained in:
@@ -450,7 +450,6 @@ add_library(
|
|||||||
cmUVProcessChain.h
|
cmUVProcessChain.h
|
||||||
cmUVStream.h
|
cmUVStream.h
|
||||||
cmUVStreambuf.h
|
cmUVStreambuf.h
|
||||||
cmUVSignalHackRAII.h
|
|
||||||
cmVariableWatch.cxx
|
cmVariableWatch.cxx
|
||||||
cmVariableWatch.h
|
cmVariableWatch.h
|
||||||
cmVersion.cxx
|
cmVersion.cxx
|
||||||
|
|||||||
@@ -40,7 +40,6 @@
|
|||||||
#include "cmRange.h"
|
#include "cmRange.h"
|
||||||
#include "cmStringAlgorithms.h"
|
#include "cmStringAlgorithms.h"
|
||||||
#include "cmSystemTools.h"
|
#include "cmSystemTools.h"
|
||||||
#include "cmUVSignalHackRAII.h" // IWYU pragma: keep
|
|
||||||
#include "cmWorkingDirectory.h"
|
#include "cmWorkingDirectory.h"
|
||||||
|
|
||||||
namespace cmsys {
|
namespace cmsys {
|
||||||
@@ -132,9 +131,6 @@ void cmCTestMultiProcessHandler::RunTests()
|
|||||||
if (this->HasCycles || this->HasInvalidGeneratedResourceSpec) {
|
if (this->HasCycles || this->HasInvalidGeneratedResourceSpec) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef CMAKE_UV_SIGNAL_HACK
|
|
||||||
cmUVSignalHackRAII hackRAII;
|
|
||||||
#endif
|
|
||||||
this->TestHandler->SetMaxIndex(this->FindMaxIndex());
|
this->TestHandler->SetMaxIndex(this->FindMaxIndex());
|
||||||
|
|
||||||
uv_loop_init(&this->Loop);
|
uv_loop_init(&this->Loop);
|
||||||
|
|||||||
@@ -1,45 +0,0 @@
|
|||||||
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
||||||
file Copyright.txt or https://cmake.org/licensing for details. */
|
|
||||||
#pragma once
|
|
||||||
#include "cmConfigure.h" // IWYU pragma: keep
|
|
||||||
|
|
||||||
#include <cm3p/uv.h>
|
|
||||||
|
|
||||||
#if defined(CMAKE_USE_SYSTEM_LIBUV) && !defined(_WIN32) && \
|
|
||||||
UV_VERSION_MAJOR == 1 && UV_VERSION_MINOR < 19
|
|
||||||
# define CMAKE_UV_SIGNAL_HACK
|
|
||||||
# include "cmUVHandlePtr.h"
|
|
||||||
/*
|
|
||||||
libuv does not use SA_RESTART on its signal handler, but C++ streams
|
|
||||||
depend on it for reliable i/o operations. This RAII helper convinces
|
|
||||||
libuv to install its handler, and then revises the handler to add the
|
|
||||||
SA_RESTART flag. We use a distinct uv loop that never runs to avoid
|
|
||||||
ever really getting a callback. libuv may fill the hack loop's signal
|
|
||||||
pipe and then stop writing, but that won't break any real loops.
|
|
||||||
*/
|
|
||||||
class cmUVSignalHackRAII
|
|
||||||
{
|
|
||||||
uv_loop_t HackLoop;
|
|
||||||
cm::uv_signal_ptr HackSignal;
|
|
||||||
static void HackCB(uv_signal_t*, int) {}
|
|
||||||
|
|
||||||
public:
|
|
||||||
cmUVSignalHackRAII()
|
|
||||||
{
|
|
||||||
uv_loop_init(&this->HackLoop);
|
|
||||||
this->HackSignal.init(this->HackLoop);
|
|
||||||
this->HackSignal.start(HackCB, SIGCHLD);
|
|
||||||
struct sigaction hack_sa;
|
|
||||||
sigaction(SIGCHLD, nullptr, &hack_sa);
|
|
||||||
if (!(hack_sa.sa_flags & SA_RESTART)) {
|
|
||||||
hack_sa.sa_flags |= SA_RESTART;
|
|
||||||
sigaction(SIGCHLD, &hack_sa, nullptr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
~cmUVSignalHackRAII()
|
|
||||||
{
|
|
||||||
this->HackSignal.stop();
|
|
||||||
uv_loop_close(&this->HackLoop);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
@@ -18,7 +18,6 @@
|
|||||||
#include "cmRange.h"
|
#include "cmRange.h"
|
||||||
#include "cmStringAlgorithms.h"
|
#include "cmStringAlgorithms.h"
|
||||||
#include "cmUVHandlePtr.h"
|
#include "cmUVHandlePtr.h"
|
||||||
#include "cmUVSignalHackRAII.h" // IWYU pragma: keep
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief libuv pipe buffer class
|
* @brief libuv pipe buffer class
|
||||||
@@ -516,9 +515,6 @@ public:
|
|||||||
static void UVSlotEnd(uv_async_t* handle);
|
static void UVSlotEnd(uv_async_t* handle);
|
||||||
|
|
||||||
// -- UV loop
|
// -- UV loop
|
||||||
#ifdef CMAKE_UV_SIGNAL_HACK
|
|
||||||
std::unique_ptr<cmUVSignalHackRAII> UVHackRAII;
|
|
||||||
#endif
|
|
||||||
std::unique_ptr<uv_loop_t> UVLoop;
|
std::unique_ptr<uv_loop_t> UVLoop;
|
||||||
cm::uv_async_ptr UVRequestBegin;
|
cm::uv_async_ptr UVRequestBegin;
|
||||||
cm::uv_async_ptr UVRequestEnd;
|
cm::uv_async_ptr UVRequestEnd;
|
||||||
@@ -563,9 +559,6 @@ cmWorkerPoolInternal::cmWorkerPoolInternal(cmWorkerPool* pool)
|
|||||||
{
|
{
|
||||||
// Initialize libuv loop
|
// Initialize libuv loop
|
||||||
uv_disable_stdio_inheritance();
|
uv_disable_stdio_inheritance();
|
||||||
#ifdef CMAKE_UV_SIGNAL_HACK
|
|
||||||
UVHackRAII = cm::make_unique<cmUVSignalHackRAII>();
|
|
||||||
#endif
|
|
||||||
this->UVLoop = cm::make_unique<uv_loop_t>();
|
this->UVLoop = cm::make_unique<uv_loop_t>();
|
||||||
uv_loop_init(this->UVLoop.get());
|
uv_loop_init(this->UVLoop.get());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user