diff --git a/src/XrdCl/XrdClInQueue.cc b/src/XrdCl/XrdClInQueue.cc index e40cf69cad9..fe95e985c5a 100644 --- a/src/XrdCl/XrdClInQueue.cc +++ b/src/XrdCl/XrdClInQueue.cc @@ -199,7 +199,7 @@ namespace XrdCl action = it->second.first->OnStreamEvent( event, streamNum, status ); if( action & IncomingMsgHandler::RemoveHandler ) - pHandlers.erase( it++ ); + it = pHandlers.erase( it ); else ++it; } @@ -221,7 +221,7 @@ namespace XrdCl { it->second.first->OnStreamEvent( IncomingMsgHandler::Timeout, 0, Status( stError, errOperationExpired ) ); - pHandlers.erase( it++ ); + it = pHandlers.erase( it ); } else ++it; diff --git a/src/XrdCl/XrdClOutQueue.cc b/src/XrdCl/XrdClOutQueue.cc index 24e77817626..696b4f0e5f2 100644 --- a/src/XrdCl/XrdClOutQueue.cc +++ b/src/XrdCl/XrdClOutQueue.cc @@ -29,6 +29,7 @@ namespace XrdCl time_t expires, bool stateful ) { + XrdSysMutexHelper lck( pMutex ); pMessages.push_back( MsgHelper( msg, handler, expires, stateful ) ); } @@ -40,6 +41,7 @@ namespace XrdCl time_t expires, bool stateful ) { + XrdSysMutexHelper lck( pMutex ); pMessages.push_front( MsgHelper( msg, handler, expires, stateful ) ); } @@ -50,6 +52,8 @@ namespace XrdCl time_t &expires, bool &stateful ) { + XrdSysMutexHelper lck( pMutex ); + if( pMessages.empty() ) return 0; @@ -66,6 +70,7 @@ namespace XrdCl //---------------------------------------------------------------------------- void OutQueue::PopFront() { + XrdSysMutexHelper lck( pMutex ); pMessages.pop_front(); } @@ -74,6 +79,7 @@ namespace XrdCl //---------------------------------------------------------------------------- void OutQueue::Report( Status status ) { + XrdSysMutexHelper lck( pMutex ); MessageList::iterator it; for( it = pMessages.begin(); it != pMessages.end(); ++it ) it->handler->OnStatusReady( it->msg, status ); @@ -84,6 +90,8 @@ namespace XrdCl //------------------------------------------------------------------------ uint64_t OutQueue::GetSizeStateless() const { + XrdSysMutexHelper lck( pMutex ); + uint64_t size = 0; MessageList::const_iterator it; for( it = pMessages.begin(); it != pMessages.end(); ++it ) @@ -98,6 +106,8 @@ namespace XrdCl //---------------------------------------------------------------------------- void OutQueue::GrabExpired( OutQueue &queue, time_t exp ) { + XrdSysMutexHelper lck( pMutex ); + MessageList::iterator it; for( it = queue.pMessages.begin(); it != queue.pMessages.end(); ) { @@ -117,6 +127,8 @@ namespace XrdCl //---------------------------------------------------------------------------- void OutQueue::GrabStateful( OutQueue &queue ) { + XrdSysMutexHelper lck( pMutex ); + MessageList::iterator it; for( it = queue.pMessages.begin(); it != queue.pMessages.end(); ) { @@ -135,6 +147,8 @@ namespace XrdCl //---------------------------------------------------------------------------- void OutQueue::GrabItems( OutQueue &queue ) { + XrdSysMutexHelper lck( pMutex ); + MessageList::iterator it; for( it = queue.pMessages.begin(); it != queue.pMessages.end(); ++it ) pMessages.push_back( *it ); diff --git a/src/XrdCl/XrdClOutQueue.hh b/src/XrdCl/XrdClOutQueue.hh index 01aaaee8e49..df9dffbb6a4 100644 --- a/src/XrdCl/XrdClOutQueue.hh +++ b/src/XrdCl/XrdClOutQueue.hh @@ -23,6 +23,8 @@ #include #include "XrdCl/XrdClStatus.hh" +#include "XrdSys/XrdSysPthread.hh" + namespace XrdCl { class Message; @@ -147,6 +149,8 @@ namespace XrdCl typedef std::list MessageList; MessageList pMessages; + mutable XrdSysMutex pMutex; + }; }