summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Lorenz <jlorenz@de.adit-jv.com>2016-11-11 15:48:02 +0100
committerChristian as GENIVI Maintainer <genivi-maint-audiomanager@genivi.org>2016-11-14 02:50:01 -0800
commitf010b7a8a2d27e321ed37f7d93811c06e8f3e7f3 (patch)
treebe166587948c2fe8f69d834b21efe4e8bb734668
parent4da6fec4e464929dfc577d7eac0a1d0c2955737a (diff)
downloadaudiomanager-f010b7a8a2d27e321ed37f7d93811c06e8f3e7f3.tar.gz
Utility: Serializer::dtor must also remove the fd from list to prevent crash.
Signed-off-by: Jens Lorenz <jlorenz@de.adit-jv.com>
-rw-r--r--AudioManagerUtilities/include/CAmSerializer.h16
1 files changed, 10 insertions, 6 deletions
diff --git a/AudioManagerUtilities/include/CAmSerializer.h b/AudioManagerUtilities/include/CAmSerializer.h
index 40f2f07..b0cd70e 100644
--- a/AudioManagerUtilities/include/CAmSerializer.h
+++ b/AudioManagerUtilities/include/CAmSerializer.h
@@ -254,6 +254,8 @@ private:
int mPipe[2]; //!< the pipe
int mReturnPipe[2]; //!< pipe handling returns
+ sh_pollHandle_t mHandle;
+ CAmSocketHandler* mpSocketHandler;
std::deque<CAmDelegagePtr> mListDelegatePoiters; //!< intermediate queue to store the pipe results
public:
@@ -764,6 +766,8 @@ public:
CAmSerializer(CAmSocketHandler *iSocketHandler) :
mPipe(), //
mReturnPipe(),//
+ mHandle(),
+ mpSocketHandler(iSocketHandler),
mListDelegatePoiters(), //
receiverCallbackT(this, &CAmSerializer::receiverCallback), //
dispatcherCallbackT(this, &CAmSerializer::dispatcherCallback), //
@@ -784,17 +788,17 @@ public:
}
short event = 0;
- sh_pollHandle_t handle;
event |= POLLIN;
- iSocketHandler->addFDPoll(mPipe[0], event, NULL, &receiverCallbackT, &checkerCallbackT, &dispatcherCallbackT, NULL, handle);
+ mpSocketHandler->addFDPoll(mPipe[0], event, NULL, &receiverCallbackT, &checkerCallbackT, &dispatcherCallbackT, NULL, mHandle);
}
~CAmSerializer()
{
- close(mPipe[0]);
- close(mPipe[1]);
- close(mReturnPipe[0]);
- close(mReturnPipe[1]);
+ mpSocketHandler->removeFDPoll(mHandle);
+ close(mPipe[0]);
+ close(mPipe[1]);
+ close(mReturnPipe[0]);
+ close(mReturnPipe[1]);
}
};
} /* namespace am */