MythTV master
signalhandling.h
Go to the documentation of this file.
1#ifndef SIGNALHANDLING_H_
2#define SIGNALHANDLING_H_
3
4#include <QObject>
5#include <QSocketNotifier>
6#include <QMutex>
7#include <QList>
8#include <QMap>
9
10#include <array>
11#include <cstdint>
12#include <csignal>
13#include <unistd.h>
14
15#include "mythbaseexp.h" // MBASE_PUBLIC , etc.
16
17#ifdef _WIN32
18// Quick fix to let this compile for Windows: we have it disabled on the
19// calling side for Windows anyways, IIRC.
20using siginfo_t = void;
21#endif
22
23using SigHandlerFunc = void (*)(void);
24
26class MBASE_PUBLIC SignalHandler: public QObject
27{
28 Q_OBJECT
29
30 public:
31 static void Init(QObject *parent = nullptr);
32 static void Done(void);
33
34 static void SetHandler(int signum, SigHandlerFunc handler);
35
36 static bool IsExiting(void) { return s_exit_program; }
37
38 // Unix signal handler.
39 // context is of type ucontext_t * cast to void *
40 static void signalHandler(int signum, siginfo_t *info, void *context);
41
42 public slots:
43 // Qt signal handler.
44 void handleSignal(void);
45
46 private:
47 explicit SignalHandler(QObject *parent);
48 ~SignalHandler() override;
49 void SetHandlerPrivate(int signum, SigHandlerFunc handler);
50
51 static std::array<int,2> s_sigFd;
52 static volatile bool s_exit_program;
53 QSocketNotifier *m_notifier {nullptr};
54 char *m_sigStack {nullptr};
55
57 QMap<int, SigHandlerFunc> m_sigMap;
58
59 static QMutex s_singletonLock;
61};
62
63#endif
64
65/*
66 * vim:ts=4:sw=4:ai:et:si:sts=4
67 */
A container object to handle UNIX signals in the Qt space correctly.
static QMutex s_singletonLock
static std::array< int, 2 > s_sigFd
static SignalHandler * s_singleton
QMap< int, SigHandlerFunc > m_sigMap
static volatile bool s_exit_program
static bool IsExiting(void)
QMutex m_sigMapLock
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15
dictionary info
Definition: azlyrics.py:7
void siginfo_t
void(*)(void) SigHandlerFunc