summaryrefslogtreecommitdiff
path: root/AudioManagerDaemon/src/CAmSocketHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'AudioManagerDaemon/src/CAmSocketHandler.cpp')
-rw-r--r--AudioManagerDaemon/src/CAmSocketHandler.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/AudioManagerDaemon/src/CAmSocketHandler.cpp b/AudioManagerDaemon/src/CAmSocketHandler.cpp
index 9bef60e..f7c4ace 100644
--- a/AudioManagerDaemon/src/CAmSocketHandler.cpp
+++ b/AudioManagerDaemon/src/CAmSocketHandler.cpp
@@ -34,16 +34,33 @@
namespace am
{
+CAmSocketHandler* CAmSocketHandler::mInstance=NULL;
+
CAmSocketHandler::CAmSocketHandler() :
+ mPipe(),
mListPoll(), //
mListTimer(), //
mListActiveTimer(), //
mLastInsertedHandle(0), //
mLastInsertedPollHandle(0), //
mRecreatePollfds(true), //
- mStartTime()
+ mStartTime(), //
+ receiverCallbackT(this, &CAmSocketHandler::receiverCallback),//
+ checkerCallbackT(this, &CAmSocketHandler::checkerCallback)//
{
gDispatchDone = 1;
+ mInstance=this;
+
+ if (pipe(mPipe) == -1)
+ {
+ logError("CAmSerializer could not create pipe!");
+ }
+
+ //add the pipe to the poll - nothing needs to be proccessed here we just need the pipe to trigger the ppoll
+ short event = 0;
+ sh_pollHandle_t handle;
+ event |= POLLIN;
+ addFDPoll(mPipe[0], event, NULL, &receiverCallbackT, &checkerCallbackT, NULL, NULL, handle);
}
CAmSocketHandler::~CAmSocketHandler()
@@ -500,6 +517,24 @@ void CAmSocketHandler::timerCorrection()
}
}
+void CAmSocketHandler::exit_mainloop()
+{
+ //end the while loop
+ stop_listening();
+
+ //fire the ending filedescriptor
+ int p(1);
+ write(mPipe[1], &p, sizeof(p));
+}
+
+void CAmSocketHandler::static_exit_mainloop()
+{
+ if (mInstance!=0)
+ {
+ mInstance->exit_mainloop();
+ }
+}
+
/**
* is used to set the pointer for the ppoll command
* @param buffertime