summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AudioManagerUtilities/include/CAmSocketHandler.h4
-rw-r--r--AudioManagerUtilities/src/CAmSocketHandler.cpp63
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; //!<list that holds all information for the ppoll
@@ -306,7 +307,6 @@ class CAmSocketHandler
sh_identifier_s mSetSignalhandlerKeys; //!A set of all used signal handler keys
VectorSignalHandlers_t mSignalHandlers;
internal_codes_t mInternalCodes;
- sh_pollHandle_t mSignalFdHandle;
#ifndef WITH_TIMERFD
timespec mStartTime; //!<here the actual time is saved for timecorrection
#endif
@@ -448,8 +448,6 @@ private:
* @return handle
*/
bool nextHandle(sh_identifier_s & handle);
-
- am_Error_e getFDPollData(const sh_pollHandle_t handle, sh_poll_s & outPollData);
public:
diff --git a/AudioManagerUtilities/src/CAmSocketHandler.cpp b/AudioManagerUtilities/src/CAmSocketHandler.cpp
index 90d7a49..b61f78a 100644
--- a/AudioManagerUtilities/src/CAmSocketHandler.cpp
+++ b/AudioManagerUtilities/src/CAmSocketHandler.cpp
@@ -48,6 +48,7 @@ namespace am
CAmSocketHandler::CAmSocketHandler() :
mEventFd(-1), //
+ mSignalFd(-1), //
mDispatchDone(true), //
mSetPollKeys(MAX_POLLHANDLE), //
mMapShPoll(), //
@@ -58,8 +59,7 @@ CAmSocketHandler::CAmSocketHandler() :
#endif
mSetSignalhandlerKeys(MAX_POLLHANDLE), //
mSignalHandlers(), //
- mInternalCodes(internal_codes_e::NO_ERROR),
- mSignalFdHandle(0)
+ mInternalCodes(internal_codes_e::NO_ERROR)
#ifndef WITH_TIMERFD
,mStartTime() //
#endif
@@ -275,19 +275,6 @@ bool CAmSocketHandler::fatalErrorOccurred()
return (mInternalCodes & internal_codes_e::FD_ERROR);
}
-am_Error_e CAmSocketHandler::getFDPollData(const sh_pollHandle_t handle, sh_poll_s & outPollData)
-{
- for (auto it : mMapShPoll)
- {
- if (it.second.handle != handle)
- continue;
-
- outPollData = it.second;
- return (E_OK);
- }
- return (E_UNKNOWN);
-}
-
/**
* Adds a signal handler filedescriptor to the polling loop
*
@@ -335,35 +322,25 @@ am_Error_e CAmSocketHandler::listenToSignals(const std::vector<uint8_t> & 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<uint8_t> & 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);