aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/sighandler
diff options
context:
space:
mode:
authorijon <ijon@yandex-team.ru>2022-02-10 16:49:56 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:49:56 +0300
commita62b5e9ea9837fdaa7a5e327b7f98b41e4d18cf6 (patch)
tree14cf580409bd4159d757c24c726fd796b6011688 /library/cpp/sighandler
parent570af552997dea3da2712f693b345afa31932f3b (diff)
downloadydb-a62b5e9ea9837fdaa7a5e327b7f98b41e4d18cf6.tar.gz
Restoring authorship annotation for <ijon@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/sighandler')
-rw-r--r--library/cpp/sighandler/async_signals_handler.cpp44
-rw-r--r--library/cpp/sighandler/async_signals_handler.h12
2 files changed, 28 insertions, 28 deletions
diff --git a/library/cpp/sighandler/async_signals_handler.cpp b/library/cpp/sighandler/async_signals_handler.cpp
index 00ce1c18fb..1f437b8f5f 100644
--- a/library/cpp/sighandler/async_signals_handler.cpp
+++ b/library/cpp/sighandler/async_signals_handler.cpp
@@ -1,16 +1,16 @@
-#include "async_signals_handler.h"
+#include "async_signals_handler.h"
#include <util/system/platform.h>
-
+
#if !defined(_win_)
-
+
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
-
+
#if defined(_linux_)
#include <dlfcn.h>
#endif
@@ -57,13 +57,13 @@ namespace {
typedef TAutoPtr<TEventHandler> TEventHandlerPtr;
THashMap<int, TEventHandlerPtr> Handlers;
TRWMutex HandlersLock;
-
+
TAtomic ShouldDie;
TSystemEvent DieEvent;
static void* ThreadFunc(void* data) {
reinterpret_cast<TAsyncSignalsHandler*>(data)->RealThreadFunc();
-
+
return nullptr;
}
@@ -71,7 +71,7 @@ namespace {
for (;;) {
ui8 signum;
const ssize_t bytesRead = read(SignalPipeReadFd, &signum, 1);
-
+
Y_VERIFY(bytesRead >= 0 || (bytesRead == -1 && errno == EINTR), "read failed: %s (errno = %d)", strerror(errno), errno);
if (AtomicAdd(ShouldDie, 0) != 0) {
@@ -79,7 +79,7 @@ namespace {
break;
}
-
+
if (bytesRead == 0) {
break;
} else if (bytesRead == -1) {
@@ -94,8 +94,8 @@ namespace {
handler->Get()->Handle(signum);
}
}
- }
-
+ }
+
public:
TAsyncSignalsHandler()
: Thread(TThread::TParams(ThreadFunc, this).SetName("sighandler"))
@@ -103,7 +103,7 @@ namespace {
, ShouldDie(0)
{
int filedes[2] = {-1};
-
+
#ifdef _linux_
int result;
@@ -145,20 +145,20 @@ namespace {
Thread.Start();
Thread.Detach();
}
-
+
~TAsyncSignalsHandler() {
AtomicSwap(&ShouldDie, TAtomic(1));
ui8 fakeSignal = 0;
WriteAllOrDie(SIGNAL_PIPE_WRITE_FD, &fakeSignal, 1);
-
+
DieEvent.WaitT(TDuration::Seconds(15));
-
+
/* may cause VERIFY failure in signal handler, propably we should leave it to process clean procedure
close(SIGNAL_PIPE_WRITE_FD);
close(SignalPipeReadFd);
*/
}
-
+
bool DoInstall(int signum, TAutoPtr<TEventHandler> handler) {
TWriteGuard dnd(HandlersLock);
TEventHandlerPtr& ev = Handlers[signum];
@@ -181,7 +181,7 @@ namespace {
}
}
};
-
+
// This pointer is never deleted - yeah, it's intended memory leak.
// It is necessary to prevent problems when user's signal handler calls exit function
// which destroys all global variables including this one.
@@ -204,16 +204,16 @@ void SetAsyncSignalHandler(int signum, TAutoPtr<TEventHandler> handler) {
}
SIGNALS_HANDLER->Install(signum, handler);
-}
-
+}
+
#else //_win_
-
+
void SetAsyncSignalHandler(int, TAutoPtr<TEventHandler>) {
// TODO: it's really easy to port using _pipe, _read and _write, but it must be tested properly.
}
-
-#endif
-
+
+#endif
+
namespace {
template <typename TFunc>
class TFunctionEventHandler: public TEventHandler {
diff --git a/library/cpp/sighandler/async_signals_handler.h b/library/cpp/sighandler/async_signals_handler.h
index da36365ace..9de1fe1fc9 100644
--- a/library/cpp/sighandler/async_signals_handler.h
+++ b/library/cpp/sighandler/async_signals_handler.h
@@ -1,14 +1,14 @@
-#pragma once
-
+#pragma once
+
#include <util/generic/ptr.h>
#include <functional>
-struct TEventHandler {
+struct TEventHandler {
virtual ~TEventHandler() {
}
- virtual int Handle(int signum) = 0;
-};
-
+ virtual int Handle(int signum) = 0;
+};
+
void SetAsyncSignalHandler(int signum, TAutoPtr<TEventHandler> handler);
void SetAsyncSignalHandler(int signum, void (*handler)(int));
void SetAsyncSignalFunction(int signum, std::function<void(int)> func);