summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSebastien Braun2010-10-11 12:27:27 +0200
committerSebastien Braun2010-10-11 12:27:27 +0200
commitbcaa6e3580f5b227ab48693192c459cc72c30224 (patch)
treebe40c6908e375a0d31cbb77a9b82f6b39a728063 /src
parentLog unmatched events in pvsprivinputd, too. (diff)
downloadpvs-bcaa6e3580f5b227ab48693192c459cc72c30224.tar.gz
pvs-bcaa6e3580f5b227ab48693192c459cc72c30224.tar.xz
pvs-bcaa6e3580f5b227ab48693192c459cc72c30224.zip
Better error handling for PVSPrivInputHandler
Diffstat (limited to 'src')
-rw-r--r--src/input/pvsPrivInputHandler.cpp21
-rw-r--r--src/input/pvsprivinputd.cpp4
2 files changed, 21 insertions, 4 deletions
diff --git a/src/input/pvsPrivInputHandler.cpp b/src/input/pvsPrivInputHandler.cpp
index 84ccbae..d33697a 100644
--- a/src/input/pvsPrivInputHandler.cpp
+++ b/src/input/pvsPrivInputHandler.cpp
@@ -86,9 +86,24 @@ void PVSPrivInputHandler::canRead()
if(!pvsPrivInputRecvMessage(_fd, _messageAssembly.data(), siz, pid, uid, gid, &err))
{
- close(_fd);
- deleteLater();
- return;
+ switch(err)
+ {
+ case EAGAIN:
+#if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN)
+ case EWOULDBLOCK:
+#endif
+ // That's okay. Nothing to do.
+ break;
+ case 0:
+ // We'll survive. There was no actual error, just the library routine
+ // that decided it did not really want to receive that packet.
+ break;
+ default:
+ qWarning("Something bad just happened, and cannot handle it. Panicking.");
+ close(_fd);
+ deleteLater();
+ return;
+ }
}
else
{
diff --git a/src/input/pvsprivinputd.cpp b/src/input/pvsprivinputd.cpp
index e6ae155..df3acfc 100644
--- a/src/input/pvsprivinputd.cpp
+++ b/src/input/pvsprivinputd.cpp
@@ -182,7 +182,9 @@ int main(int argc, char** argv)
}
// Install our main object
- PVSPrivInputHandler handler(sock);
+ PVSPrivInputHandler* handler = new PVSPrivInputHandler(sock, &app);
+ // When the handler gets deleted, we want to quit the application
+ QObject::connect(handler, SIGNAL(destroyed(QObject*)), &app, SLOT(quit()));
// set up signal handling:
if(socketpair(AF_UNIX, SOCK_DGRAM, 0, signalFds) < 0)