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.
stage/master/nightly/2023/11/19
parent
6f8532fbfa
commit
6ef03ca03e
|
@ -450,7 +450,6 @@ add_library(
|
|||
cmUVProcessChain.h
|
||||
cmUVStream.h
|
||||
cmUVStreambuf.h
|
||||
cmUVSignalHackRAII.h
|
||||
cmVariableWatch.cxx
|
||||
cmVariableWatch.h
|
||||
cmVersion.cxx
|
||||
|
|
|
@ -40,7 +40,6 @@
|
|||
#include "cmRange.h"
|
||||
#include "cmStringAlgorithms.h"
|
||||
#include "cmSystemTools.h"
|
||||
#include "cmUVSignalHackRAII.h" // IWYU pragma: keep
|
||||
#include "cmWorkingDirectory.h"
|
||||
|
||||
namespace cmsys {
|
||||
|
@ -132,9 +131,6 @@ void cmCTestMultiProcessHandler::RunTests()
|
|||
if (this->HasCycles || this->HasInvalidGeneratedResourceSpec) {
|
||||
return;
|
||||
}
|
||||
#ifdef CMAKE_UV_SIGNAL_HACK
|
||||
cmUVSignalHackRAII hackRAII;
|
||||
#endif
|
||||
this->TestHandler->SetMaxIndex(this->FindMaxIndex());
|
||||
|
||||
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 "cmStringAlgorithms.h"
|
||||
#include "cmUVHandlePtr.h"
|
||||
#include "cmUVSignalHackRAII.h" // IWYU pragma: keep
|
||||
|
||||
/**
|
||||
* @brief libuv pipe buffer class
|
||||
|
@ -516,9 +515,6 @@ public:
|
|||
static void UVSlotEnd(uv_async_t* handle);
|
||||
|
||||
// -- UV loop
|
||||
#ifdef CMAKE_UV_SIGNAL_HACK
|
||||
std::unique_ptr<cmUVSignalHackRAII> UVHackRAII;
|
||||
#endif
|
||||
std::unique_ptr<uv_loop_t> UVLoop;
|
||||
cm::uv_async_ptr UVRequestBegin;
|
||||
cm::uv_async_ptr UVRequestEnd;
|
||||
|
@ -563,9 +559,6 @@ cmWorkerPoolInternal::cmWorkerPoolInternal(cmWorkerPool* pool)
|
|||
{
|
||||
// Initialize libuv loop
|
||||
uv_disable_stdio_inheritance();
|
||||
#ifdef CMAKE_UV_SIGNAL_HACK
|
||||
UVHackRAII = cm::make_unique<cmUVSignalHackRAII>();
|
||||
#endif
|
||||
this->UVLoop = cm::make_unique<uv_loop_t>();
|
||||
uv_loop_init(this->UVLoop.get());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue