summaryrefslogtreecommitdiff
path: root/AudioManagerDaemon/src
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
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')
-rw-r--r--AudioManagerDaemon/src/CAmCommandSender.cpp2
-rw-r--r--AudioManagerDaemon/src/CAmControlReceiver.cpp7
-rw-r--r--AudioManagerDaemon/src/CAmControlSender.cpp4
-rw-r--r--AudioManagerDaemon/src/CAmRoutingSender.cpp2
-rw-r--r--AudioManagerDaemon/src/CAmSocketHandler.cpp37
-rwxr-xr-xAudioManagerDaemon/src/main.cpp8
6 files changed, 47 insertions, 13 deletions
diff --git a/AudioManagerDaemon/src/CAmCommandSender.cpp b/AudioManagerDaemon/src/CAmCommandSender.cpp
index 87f9005..1494bc1 100644
--- a/AudioManagerDaemon/src/CAmCommandSender.cpp
+++ b/AudioManagerDaemon/src/CAmCommandSender.cpp
@@ -133,7 +133,7 @@ CAmCommandSender::CAmCommandSender(const std::vector<std::string>& listOfPluginD
CAmCommandSender::~CAmCommandSender()
{
- unloadLibraries();
+ //unloadLibraries();
}
am_Error_e CAmCommandSender::startupInterfaces(CAmCommandReceiver *iCommandReceiver)
diff --git a/AudioManagerDaemon/src/CAmControlReceiver.cpp b/AudioManagerDaemon/src/CAmControlReceiver.cpp
index 2ee225a..f78a0f3 100644
--- a/AudioManagerDaemon/src/CAmControlReceiver.cpp
+++ b/AudioManagerDaemon/src/CAmControlReceiver.cpp
@@ -483,12 +483,7 @@ void CAmControlReceiver::confirmControllerReady()
void CAmControlReceiver::confirmControllerRundown()
{
- logInfo ("CAmControlReceiver::confirmControllerRundown(), exiting regularly");
- //once the controller is ready, it will exit.
- CAmDltWrapper* inst(getWrapper());
- inst->deinit();
- exit (0);
- //todo: one time implement here system interaction with NSM
+ logInfo ("CAmControlReceiver::confirmControllerRundown(), will exit now");
}
am_Error_e CAmControlReceiver::getSocketHandler(CAmSocketHandler *& socketHandler)
diff --git a/AudioManagerDaemon/src/CAmControlSender.cpp b/AudioManagerDaemon/src/CAmControlSender.cpp
index 82446ce..569e4c4 100644
--- a/AudioManagerDaemon/src/CAmControlSender.cpp
+++ b/AudioManagerDaemon/src/CAmControlSender.cpp
@@ -74,8 +74,8 @@ CAmControlSender::CAmControlSender(std::string controlPluginFile) :
CAmControlSender::~CAmControlSender()
{
- if (mlibHandle)
- dlclose(mlibHandle);
+ //if (mlibHandle)
+ // dlclose(mlibHandle);
}
am_Error_e CAmControlSender::hookUserConnectionRequest(const am_sourceID_t sourceID, const am_sinkID_t sinkID, am_mainConnectionID_t & mainConnectionID)
diff --git a/AudioManagerDaemon/src/CAmRoutingSender.cpp b/AudioManagerDaemon/src/CAmRoutingSender.cpp
index ea9e00a..05078a9 100644
--- a/AudioManagerDaemon/src/CAmRoutingSender.cpp
+++ b/AudioManagerDaemon/src/CAmRoutingSender.cpp
@@ -143,7 +143,7 @@ CAmRoutingSender::CAmRoutingSender(const std::vector<std::string>& listOfPluginD
CAmRoutingSender::~CAmRoutingSender()
{
- unloadLibraries();
+ //unloadLibraries();
HandlesMap::iterator it = mlistActiveHandles.begin();
//clean up heap if existent
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
diff --git a/AudioManagerDaemon/src/main.cpp b/AudioManagerDaemon/src/main.cpp
index 3d552f5..6b84ba3 100755
--- a/AudioManagerDaemon/src/main.cpp
+++ b/AudioManagerDaemon/src/main.cpp
@@ -265,10 +265,15 @@ static void signalHandler(int sig, siginfo_t *siginfo, void *context)
(void) siginfo;
(void) context;
logInfo("signal handler was called, signal",sig);
- gDispatchDone = 1;
//todo: maually fire the mainloop
CAmControlSender::CallsetControllerRundown();
+ //deinit the DLT
+ CAmDltWrapper* inst(getWrapper());
+ inst->deinit();
+
+ CAmSocketHandler::static_exit_mainloop();
+
}
void mainProgram()
@@ -377,7 +382,6 @@ int main(int argc, char *argv[], char** envp)
exit(EXIT_FAILURE);
}
-
close(fd0);
close(fd1);
close(fd2);