X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=signalhandler.cpp;h=71f66f559b4b6b5711b83dfafce691e8aa2dc17c;hp=f136a5234281038a4e4daec3fd61658193966f73;hb=f3d66e52ed6b454ea7a0662d5e6367e230116a2b;hpb=708605aa2c4ac7bbdaa3b2b539911f0d5ede1baf;ds=sidebyside diff --git a/signalhandler.cpp b/signalhandler.cpp index f136a523..71f66f55 100644 --- a/signalhandler.cpp +++ b/signalhandler.cpp @@ -18,19 +18,22 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "signalhandler.h" +#include "signalhandler.hpp" +#include #include +#include #include #include +#include #include -int SignalHandler::_sockets[2]; +int SignalHandler::sockets_[2]; bool SignalHandler::prepare_signals() { - if(socketpair(AF_UNIX, SOCK_STREAM, 0, _sockets) != 0) + if(socketpair(AF_UNIX, SOCK_STREAM, 0, sockets_) != 0) return false; struct sigaction sig_action; @@ -41,8 +44,8 @@ bool SignalHandler::prepare_signals() if(sigaction(SIGINT, &sig_action, 0) != 0 || sigaction(SIGTERM, &sig_action, 0) != 0) { - close(_sockets[0]); - close(_sockets[1]); + close(sockets_[0]); + close(sockets_[1]); return false; } @@ -50,35 +53,41 @@ bool SignalHandler::prepare_signals() } SignalHandler::SignalHandler(QObject* parent) : QObject(parent), - _socket_notifier(0) + socket_notifier_(0) { - _socket_notifier = new QSocketNotifier(_sockets[1], + socket_notifier_ = new QSocketNotifier(sockets_[1], QSocketNotifier::Read, this); - connect(_socket_notifier, SIGNAL(activated(int)), + connect(socket_notifier_, SIGNAL(activated(int)), SLOT(on_socket_notifier_activated())); } void SignalHandler::on_socket_notifier_activated() { - _socket_notifier->setEnabled(false); + socket_notifier_->setEnabled(false); int sig_number; - read(_sockets[1], &sig_number, sizeof(int)); + if(read(sockets_[1], &sig_number, sizeof(int)) != sizeof(int)) { + qDebug() << "Failed to catch signal"; + abort(); + } switch(sig_number) { case SIGINT: - emit int_received(); + Q_EMIT int_received(); break; case SIGTERM: - emit term_received(); + Q_EMIT term_received(); break; } - _socket_notifier->setEnabled(true); + socket_notifier_->setEnabled(true); } void SignalHandler::handle_signals(int sig_number) { - write(_sockets[0], &sig_number, sizeof(int)); + if(write(sockets_[0], &sig_number, sizeof(int)) != sizeof(int)) { + // Failed to handle signal + abort(); + } }