]> sigrok.org Git - pulseview.git/blobdiff - signalhandler.cpp
TimeMarker: Fixed display of negative value in popup
[pulseview.git] / signalhandler.cpp
index a3ef6b82e8755c7d579da5e46f2f199395138acf..66acc1fd7aaf71b24b350c6509f3460a6463ac04 100644 (file)
@@ -1,94 +1,95 @@
 /*
-
-Copyright 2013 Adam Reichold
-
-This file is part of qpdfview.
-
-qpdfview is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-qpdfview is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with qpdfview.  If not, see <http://www.gnu.org/licenses/>.
-
-*/
-
-#include "signalhandler.h"
-
+ * This file is part of the PulseView project.
+ *
+ * Copyright (C) 2013 Adam Reichold
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#include "signalhandler.hpp"
+
+#include <assert.h>
 #include <signal.h>
+#include <stdlib.h>
 #include <sys/socket.h>
 #include <unistd.h>
 
+#include <QDebug>
 #include <QSocketNotifier>
 
-int SignalHandler::s_sockets[2];
+int SignalHandler::sockets_[2];
 
-bool SignalHandler::prepareSignals()
+bool SignalHandler::prepare_signals()
 {
-    if(socketpair(AF_UNIX, SOCK_STREAM, 0, s_sockets) != 0)
-    {
-        return false;
-    }
-
-    struct sigaction sigAction;
-
-    sigAction.sa_handler = SignalHandler::handleSignals;
-    sigemptyset(&sigAction.sa_mask);
-    sigAction.sa_flags = SA_RESTART;
-
-    if(sigaction(SIGINT, &sigAction, 0) != 0)
-    {
-        close(s_sockets[0]);
-        close(s_sockets[1]);
+       if(socketpair(AF_UNIX, SOCK_STREAM, 0, sockets_) != 0)
+               return false;
 
-        return false;
-    }
+       struct sigaction sig_action;
 
-    if(sigaction(SIGTERM, &sigAction, 0) != 0)
-    {
-        close(s_sockets[0]);
-        close(s_sockets[1]);
+       sig_action.sa_handler = SignalHandler::handle_signals;
+       sigemptyset(&sig_action.sa_mask);
+       sig_action.sa_flags = SA_RESTART;
 
-        return false;
-    }
+       if(sigaction(SIGINT, &sig_action, 0) != 0 ||
+               sigaction(SIGTERM, &sig_action, 0) != 0) {
+               close(sockets_[0]);
+               close(sockets_[1]);
+               return false;
+       }
 
-    return true;
+       return true;
 }
 
 SignalHandler::SignalHandler(QObject* parent) : QObject(parent),
-    m_socketNotifier(0)
+       socket_notifier_(0)
 {
-    m_socketNotifier = new QSocketNotifier(s_sockets[1], QSocketNotifier::Read, this);
-    connect(m_socketNotifier, SIGNAL(activated(int)), SLOT(on_socketNotifier_activated()));
+       socket_notifier_ = new QSocketNotifier(sockets_[1],
+               QSocketNotifier::Read, this);
+       connect(socket_notifier_, SIGNAL(activated(int)),
+               SLOT(on_socket_notifier_activated()));
 }
 
-void SignalHandler::on_socketNotifier_activated()
+void SignalHandler::on_socket_notifier_activated()
 {
-    m_socketNotifier->setEnabled(false);
-
-    int sigNumber;
-    read(s_sockets[1], &sigNumber, sizeof(int));
-
-    switch(sigNumber)
-    {
-    case SIGINT:
-        emit sigIntReceived();
-        break;
-    case SIGTERM:
-        emit sigTermReceived();
-        break;
-    }
-
-    m_socketNotifier->setEnabled(true);
+       socket_notifier_->setEnabled(false);
+
+       int sig_number;
+       if(read(sockets_[1], &sig_number, sizeof(int)) !=
+               sizeof(int)) {
+               qDebug() << "Failed to catch signal";
+               abort();
+       }
+
+       switch(sig_number)
+       {
+       case SIGINT:
+               Q_EMIT int_received();
+               break;
+       case SIGTERM:
+               Q_EMIT term_received();
+               break;
+       }
+
+       socket_notifier_->setEnabled(true);
 }
 
-void SignalHandler::handleSignals(int sigNumber)
+void SignalHandler::handle_signals(int sig_number)
 {
-    write(s_sockets[0], &sigNumber, sizeof(int));
+       if(write(sockets_[0], &sig_number, sizeof(int)) !=
+               sizeof(int)) {
+               // Failed to handle signal
+               abort();
+       }
 }