diff options
author | Christian Linke <christian.linke@bmw.de> | 2017-02-15 01:47:24 -0800 |
---|---|---|
committer | Christian Linke <christian.linke@bmw.de> | 2017-02-20 08:49:44 -0800 |
commit | 9ad6f67f6c39ec4ff49c382d5beaf9006f664fcb (patch) | |
tree | 7f1a8705f35bff4350ba813962318e562b623b82 /AudioManagerCore/src/CAmRoutingSender.cpp | |
parent | b616ca1e864f7530b9dfce4c38f9d24a9f0809c9 (diff) | |
download | audiomanager-9ad6f67f6c39ec4ff49c382d5beaf9006f664fcb.tar.gz |
handle overflow of handles correctly
Signed-off-by: Christian Linke <christian.linke@bmw.de>
Diffstat (limited to 'AudioManagerCore/src/CAmRoutingSender.cpp')
-rw-r--r-- | AudioManagerCore/src/CAmRoutingSender.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/AudioManagerCore/src/CAmRoutingSender.cpp b/AudioManagerCore/src/CAmRoutingSender.cpp index 0e25e68..9cc013d 100644 --- a/AudioManagerCore/src/CAmRoutingSender.cpp +++ b/AudioManagerCore/src/CAmRoutingSender.cpp @@ -813,17 +813,32 @@ am_Error_e CAmRoutingSender::getListHandles(std::vector<am_Handle_s> & listHandl am_Handle_s CAmRoutingSender::createHandle(std::shared_ptr<handleDataBase> handleData, const am_Handle_e type) { am_Handle_s handle; - if (++mHandleCount>=1024) //defined by 10 bit (out if structure!) - mHandleCount=1; - handle.handle = mHandleCount; handle.handleType = type; - mlistActiveHandles.insert(std::make_pair(handle, handleData)); - if ((mlistActiveHandles.size()%100) == 0) - { - logInfo("CAmRoutingSender::createHandle warning: too many open handles, number of handles: ", mlistActiveHandles.size()); + + for (int checkOverflow=0;checkOverflow<1024;checkOverflow++) + { + if (++mHandleCount>=1024) //defined by 10 bit (out if structure!) + { + mHandleCount=1; + } + handle.handle = mHandleCount; + + if ( mlistActiveHandles.find(handle) == mlistActiveHandles.end() ) + { + mlistActiveHandles.insert(std::make_pair(handle, handleData)); + if (mlistActiveHandles.size()>100) + { + logWarning(__METHOD_NAME__,"too many open handles, number of handles: ", mlistActiveHandles.size()); + } + logInfo(__METHOD_NAME__,handle.handle, handle.handleType); + return (handle); + } } - logInfo(__METHOD_NAME__,handle.handle, handle.handleType); - return (handle); + + logError(__METHOD_NAME__,"could not create new handle, all handles in use!"); + handle.handle=0; + + return(handle); } void CAmRoutingSender::setRoutingReady() |