summaryrefslogtreecommitdiff
path: root/AudioManagerUtilities/src/CAmSocketHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'AudioManagerUtilities/src/CAmSocketHandler.cpp')
-rw-r--r--AudioManagerUtilities/src/CAmSocketHandler.cpp111
1 files changed, 50 insertions, 61 deletions
diff --git a/AudioManagerUtilities/src/CAmSocketHandler.cpp b/AudioManagerUtilities/src/CAmSocketHandler.cpp
index 7cf5594..4c46dd1 100644
--- a/AudioManagerUtilities/src/CAmSocketHandler.cpp
+++ b/AudioManagerUtilities/src/CAmSocketHandler.cpp
@@ -138,9 +138,9 @@ void CAmSocketHandler::start_listenting()
{
if (mRecreatePollfds)
{
-#ifdef WITH_TIMERFD
+ #ifdef WITH_TIMERFD
closeRemovedTimers();
-#endif
+ #endif
fdPollingArray.clear();
//freeze mListPoll by copying it - otherwise we get problems when we want to manipulate it during the next lines
mListActivePolls = mListPoll;
@@ -178,16 +178,16 @@ void CAmSocketHandler::start_listenting()
//todo: here could be a timer that makes sure naughty plugins return!
listPoll.clear();
//stage 0+1, call firedCB
- for (itMfdPollingArray = fdPollingArray.begin(); itMfdPollingArray != fdPollingArray.end(); ++itMfdPollingArray)
+ for (itMfdPollingArray = fdPollingArray.begin(); itMfdPollingArray != fdPollingArray.end(); itMfdPollingArray++)
{
itMfdPollingArray->revents &= itMfdPollingArray->events | POLLERR | POLLHUP;
if ( itMfdPollingArray->revents!=0 )
- {
+ {
listmPollIt = mListActivePolls.begin();
std::advance(listmPollIt, std::distance(fdPollingArray.begin(), itMfdPollingArray));
-
+
sh_poll_s & pollObj = *listmPollIt;
-
+
listPoll.push_back(&pollObj);
CAmSocketHandler::fire(&pollObj);
itMfdPollingArray->revents = 0;
@@ -333,31 +333,26 @@ am_Error_e CAmSocketHandler::listenToSignals(const std::vector<uint8_t> & listSi
auto actionPoll = [this](const pollfd pollfd, const sh_pollHandle_t, void*)
{
- const VectorSignalHandlers_t & signalHandlers = mSignalHandlers;
- /* 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 == -1)
- {
- if (errno == EAGAIN) //Something wrong, check for EAGAIN
- bytes = read(pollfd.fd, &info, sizeof(info));
- }
- if(bytes != sizeof(info))
- {
- //Failed to read from fd...
- logError("Failed to read from signal fd");
- throw std::runtime_error(std::string("Failed to read from signal fd."));
- }
-
- /* Notify all listeners */
- for(auto it: signalHandlers)
- it.callback(it.handle, info, it.userData);
+ const VectorSignalHandlers_t & signalHandlers = mSignalHandlers;
+ /* 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))
+ {
+ //error received...
+ logError("Failed to read from signal fd");
+ throw std::runtime_error(std::string("Failed to read from signal fd."));
+ }
+
+ /* Notify all listeners */
+ for(auto it: signalHandlers)
+ it.callback(it.handle, info, it.userData);
};
/* 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);
}
- else
+ else
{
int signalHandlerFd = signalfd(sgPollData.pollfdValue.fd, &sigset, 0);
if (signalHandlerFd == -1)
@@ -463,34 +458,33 @@ am::am_Error_e CAmSocketHandler::addFDPoll(const int fd, const short event, IAmS
am_Error_e CAmSocketHandler::removeFDPoll(const sh_pollHandle_t handle)
{
CHECK_CALLER_THREAD_ID()
-
- bool handleRemoved = false;
-
- for (auto it = mListPoll.begin(); it != mListPoll.end(); ++it)
+
+ VectorListPoll_t::iterator iterator = mListPoll.begin();
+
+ for (; iterator != mListPoll.end(); ++iterator)
{
- if (it->handle == handle)
+ if (iterator->handle == handle)
{
- it = mListPoll.erase(it);
+ iterator = mListPoll.erase(iterator);
mSetPollKeys.pollHandles.erase(handle);
- handleRemoved = true;
+ mRecreatePollfds = true;
break;
}
}
-
- if ( false == handleRemoved )
+
+ if (iterator == mListPoll.end())
return (E_UNKNOWN);
-
- mRecreatePollfds = true;
-
- for (auto it = mListActivePolls.begin(); it != mListActivePolls.end(); ++it)
+
+ VectorListPoll_t::iterator iteratorActivePolls = mListActivePolls.begin();
+ for (; iteratorActivePolls != mListActivePolls.end(); ++iteratorActivePolls)
{
- if (it->handle == handle)
+ if (iteratorActivePolls->handle == handle)
{
- it->isValid = false;
+ iteratorActivePolls->isValid = false;
break;
}
}
-
+
return (E_OK);
}
@@ -622,16 +616,9 @@ am_Error_e CAmSocketHandler::addTimer(const timespec & timeouts, std::function<v
auto actionPoll = [this](const pollfd pollfd, const sh_pollHandle_t handle, void* userData)
{
uint64_t mExpirations;
- ssize_t bytes = read(pollfd.fd, &mExpirations, sizeof(mExpirations));
- if(bytes == -1)
- {
- if (errno == EAGAIN)//Something wrong, check for EAGAIN
- bytes = read(pollfd.fd, &mExpirations, sizeof(mExpirations));
- }
-
- if(bytes != sizeof(mExpirations))
+ if(read(pollfd.fd, &mExpirations, sizeof(uint64_t))!=sizeof(uint64_t))
{
- //Failed to read from fd...
+ //error received...
logError("Failed to read from timer fd");
throw std::runtime_error(std::string("Failed to read from timer fd."));
}
@@ -1067,7 +1054,7 @@ void CAmSocketHandler::fire(const sh_poll_s* a)
bool CAmSocketHandler::noDispatching(const sh_poll_s* a)
{
//remove from list of there is no checkCB
- if (nullptr == a->checkCB || false == a->isValid)
+ if (nullptr == a->checkCB || false==a->isValid )
return (true);
return (!a->checkCB(a->handle, a->userData));
}
@@ -1078,7 +1065,7 @@ bool CAmSocketHandler::noDispatching(const sh_poll_s* a)
bool CAmSocketHandler::dispatchingFinished(const sh_poll_s* a)
{
//remove from list of there is no dispatchCB
- if (nullptr == a->dispatchCB || false == a->isValid)
+ if (nullptr == a->dispatchCB || false==a->isValid )
return (true);
return (!a->dispatchCB(a->handle, a->userData));
}
@@ -1096,16 +1083,16 @@ inline timespec* CAmSocketHandler::insertTime(timespec& buffertime)
buffertime = mListActiveTimer.front().countdown;
return (&buffertime);
}
- else
-#endif
+ else
+#endif
{
return (NULL);
}
}
-#ifdef WITH_TIMERFD
+#ifdef WITH_TIMERFD
am_Error_e CAmSocketHandler::createTimeFD(const itimerspec & timeouts, int & fd)
-{
+{
fd = timerfd_create(CLOCK_MONOTONIC, TFD_NONBLOCK | TFD_CLOEXEC);
if (fd < 0)
{
@@ -1123,15 +1110,17 @@ am_Error_e CAmSocketHandler::createTimeFD(const itimerspec & timeouts, int & fd)
void CAmSocketHandler::closeRemovedTimers()
{
- for (auto it : mListRemovedTimers)
+ std::list<sh_timer_s>::iterator it(mListRemovedTimers.begin());
+ while (it != mListRemovedTimers.end())
{
- if( it.fd > -1 )
- close( it.fd );
+ if( it->fd > -1 )
+ close( it->fd );
+ ++it;
}
mListRemovedTimers.clear();
}
-#endif
+#endif
void CAmSocketHandler::callTimer(sh_timer_s& a)
{