diff --git a/modules/ripple_app/websocket/WSConnection.h b/modules/ripple_app/websocket/WSConnection.h index dd60bbfa1b..2938f0700c 100644 --- a/modules/ripple_app/websocket/WSConnection.h +++ b/modules/ripple_app/websocket/WSConnection.h @@ -242,7 +242,7 @@ public: else { msgRejected = false; - mRcvQueue.push (msg); + mRcvQueue.push_back (msg); if (mRcvQueueRunning) runQueue = false; @@ -265,10 +265,18 @@ public: } message_ptr m = mRcvQueue.front (); - mRcvQueue.pop (); + mRcvQueue.pop_front (); return m; } + void returnMessage (message_ptr ptr) + { + ScopedLockType sl (mRcvQueueLock, __FILE__, __LINE__); + + if (!mDead) + mRcvQueue.push_front(ptr); + } + private: typedef void (WSConnection::*doFuncPtr) (Json::Value& jvResult, Json::Value& jvRequest); @@ -283,7 +291,7 @@ private: boost::asio::deadline_timer mPingTimer; bool mPinged; - std::queue mRcvQueue; + std::deque mRcvQueue; bool mRcvQueueRunning; bool mDead; };