From ab3eea9263623394272017e3f2987d66ab2eb28f Mon Sep 17 00:00:00 2001 From: Jens Lorenz Date: Mon, 9 Apr 2018 16:54:02 +0200 Subject: AMUtil: Store signalfd as file descriptor instead of pollfd handle Signed-off-by: Jens Lorenz --- AudioManagerUtilities/include/CAmSocketHandler.h | 4 +- AudioManagerUtilities/src/CAmSocketHandler.cpp | 63 ++++++++---------------- 2 files changed, 21 insertions(+), 46 deletions(-) diff --git a/AudioManagerUtilities/include/CAmSocketHandler.h b/AudioManagerUtilities/include/CAmSocketHandler.h index 5ce7f54..797551d 100644 --- a/AudioManagerUtilities/include/CAmSocketHandler.h +++ b/AudioManagerUtilities/include/CAmSocketHandler.h @@ -294,6 +294,7 @@ class CAmSocketHandler typedef uint8_t internal_codes_t; int mEventFd; + int mSignalFd; bool mDispatchDone; //this starts / stops the mainloop MapShPoll_t mMapShPoll; //! & listSi return (E_NOT_POSSIBLE); } - sh_poll_s sgPollData; - if(mSignalFdHandle) + if (mSignalFd < 0) { - if(E_OK!=getFDPollData(mSignalFdHandle, sgPollData)) - { - mSignalFdHandle = 0; - } - } - - if(0==mSignalFdHandle) - { - /* Create the signalfd */ - int signalHandlerFd = signalfd(-1, &sigset, SFD_NONBLOCK); - if (signalHandlerFd == -1) - { - logError("Could not open signal fd!"); - return (E_NOT_POSSIBLE); - } - - auto actionPoll = [this](const pollfd pollfd, const sh_pollHandle_t, void*) - { - const VectorSignalHandlers_t& signalHandlers = mSignalHandlers; + /* Create the signalfd */ + mSignalFd = signalfd(-1, &sigset, SFD_NONBLOCK); + if (mSignalFd == -1) + { + logError("Could not open signal fd!", std::strerror(errno)); + return (E_NOT_POSSIBLE); + } + + auto actionPoll = [this](const pollfd pollfd, const sh_pollHandle_t, void*) + { /* We have a valid signal, read the info from the fd */ struct signalfd_siginfo info; ssize_t bytes = read(pollfd.fd, &info, sizeof(info)); if (bytes == sizeof(info)) { /* Notify all listeners */ - for(auto it: signalHandlers) + for(const auto& it: mSignalHandlers) it.callback(it.handle, info, it.userData); return; } @@ -376,15 +353,15 @@ am_Error_e CAmSocketHandler::listenToSignals(const std::vector & listSi std::ostringstream msg; msg << "Failed to read from signal fd: " << pollfd.fd << " errno: " << std::strerror(errno); throw std::runtime_error(msg.str()); - }; - /* We're going to add the signal fd through addFDPoll. At this point we don't have any signal listeners. */ - return addFDPoll(signalHandlerFd, POLLIN | POLLERR | POLLHUP, NULL, actionPoll, - [](const sh_pollHandle_t, void*) { return (false); }, NULL, NULL, mSignalFdHandle); + }; + /* We're going to add the signal fd through addFDPoll. At this point we don't have any signal listeners. */ + sh_pollHandle_t handle; + return addFDPoll(mSignalFd, POLLIN | POLLERR | POLLHUP, NULL, actionPoll, + [](const sh_pollHandle_t, void*) { return (false); }, NULL, NULL, handle); } else { - int signalHandlerFd = signalfd(sgPollData.pollfdValue.fd, &sigset, 0); - if (signalHandlerFd == -1) + if (signalfd(mSignalFd, &sigset, 0) == -1) { logError("Could not update signal fd!", std::strerror(errno)); return (E_NOT_POSSIBLE); -- cgit v1.2.1