From 8dd6a05689138a7cbb38f99ef775fe27df614f52 Mon Sep 17 00:00:00 2001 From: Jens Lorenz Date: Tue, 27 Mar 2018 11:35:18 +0200 Subject: AMUtil: Rework of listenToSignal and minor improvements Signed-off-by: Jens Lorenz --- AudioManagerUtilities/src/CAmSocketHandler.cpp | 32 ++++++++++++-------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/AudioManagerUtilities/src/CAmSocketHandler.cpp b/AudioManagerUtilities/src/CAmSocketHandler.cpp index 0ffe6eb..c5ce8d3 100644 --- a/AudioManagerUtilities/src/CAmSocketHandler.cpp +++ b/AudioManagerUtilities/src/CAmSocketHandler.cpp @@ -287,31 +287,19 @@ am_Error_e CAmSocketHandler::listenToSignals(const std::vector & listSi return (E_NOT_POSSIBLE); } - int signalHandlerFd; + sh_poll_s sgPollData; if(mSignalFdHandle) { - sh_poll_s sgPollData; if(E_OK!=getFDPollData(mSignalFdHandle, sgPollData)) { - removeFDPoll(mSignalFdHandle); - mSignalFdHandle = 0; - } - else - { - int signalHandlerFd = signalfd(sgPollData.pollfdValue.fd, &sigset, 0); - if (signalHandlerFd == -1) - { - logError("Could not update signal fd!"); - return (E_NOT_POSSIBLE); - } - return E_OK; + mSignalFdHandle = 0; } } if(0==mSignalFdHandle) { /* Create the signalfd */ - signalHandlerFd = signalfd(-1, &sigset, 0); + int signalHandlerFd = signalfd(-1, &sigset, SFD_NONBLOCK); if (signalHandlerFd == -1) { logError("Could not open signal fd!"); @@ -345,6 +333,16 @@ am_Error_e CAmSocketHandler::listenToSignals(const std::vector & listSi return addFDPoll(signalHandlerFd, POLLIN | POLLERR | POLLHUP, NULL, actionPoll, [](const sh_pollHandle_t, void*) { return (false); }, NULL, NULL, mSignalFdHandle); } + else + { + int signalHandlerFd = signalfd(sgPollData.pollfdValue.fd, &sigset, 0); + if (signalHandlerFd == -1) + { + logError("Could not update signal fd!", std::strerror(errno)); + return (E_NOT_POSSIBLE); + } + return E_OK; + } } /** @@ -459,7 +457,7 @@ am_Error_e CAmSocketHandler::addSignalHandler(std::functionhandle == handle) { - it = mSignalHandlers.erase(it); + mSignalHandlers.erase(it); mSetSignalhandlerKeys.pollHandles.erase(handle); return (E_OK); } -- cgit v1.2.1