diff options
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() |