diff options
author | Sebastien Braun | 2010-10-11 12:27:27 +0200 |
---|---|---|
committer | Sebastien Braun | 2010-10-11 12:27:27 +0200 |
commit | bcaa6e3580f5b227ab48693192c459cc72c30224 (patch) | |
tree | be40c6908e375a0d31cbb77a9b82f6b39a728063 /src/input | |
parent | Log unmatched events in pvsprivinputd, too. (diff) | |
download | pvs-bcaa6e3580f5b227ab48693192c459cc72c30224.tar.gz pvs-bcaa6e3580f5b227ab48693192c459cc72c30224.tar.xz pvs-bcaa6e3580f5b227ab48693192c459cc72c30224.zip |
Better error handling for PVSPrivInputHandler
Diffstat (limited to 'src/input')
-rw-r--r-- | src/input/pvsPrivInputHandler.cpp | 21 | ||||
-rw-r--r-- | src/input/pvsprivinputd.cpp | 4 |
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) |