summaryrefslogtreecommitdiff
path: root/AudioManagerDaemon/src/CAmSocketHandler.cpp
diff options
context:
space:
mode:
authorchristian linke <christian.linke@bmw.de>2012-11-29 16:00:05 +0100
committerchristian linke <christian.linke@bmw.de>2012-11-29 16:00:05 +0100
commit104255615d643a2278d8430a876413793563ab36 (patch)
tree2c668a14657fdf14fae39ecfd583b75dc69bc1da /AudioManagerDaemon/src/CAmSocketHandler.cpp
parent5bdad323a9b70758b1076cdef1622d71325d2e52 (diff)
downloadaudiomanager-104255615d643a2278d8430a876413793563ab36.tar.gz
* make AudioManager rundown cleaner. Now an extra created pipe is used to trigger the mainloop one last time before the AudioManager exits.
Signed-off-by: christian linke <christian.linke@bmw.de>
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