From e8a7ad47487aba3490bb63359ff17cfe584cd58c Mon Sep 17 00:00:00 2001 From: Nik Bougalis Date: Sun, 7 Aug 2016 13:15:19 -0700 Subject: [PATCH] Prevent concurrent write operations in websockets --- src/ripple/server/impl/BaseWSPeer.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ripple/server/impl/BaseWSPeer.h b/src/ripple/server/impl/BaseWSPeer.h index 0a32d8a59..fa6468923 100644 --- a/src/ripple/server/impl/BaseWSPeer.h +++ b/src/ripple/server/impl/BaseWSPeer.h @@ -132,7 +132,7 @@ protected: } void - on_write_sb(error_code const& ec); + on_ws_handshake(error_code const& ec); void do_write(); @@ -196,7 +196,7 @@ run() impl().ws_.set_option(beast::websocket::decorate(identity{})); using namespace beast::asio; impl().ws_.async_accept(request_, strand_.wrap(std::bind( - &BaseWSPeer::on_write_sb, impl().shared_from_this(), + &BaseWSPeer::on_ws_handshake, impl().shared_from_this(), placeholders::error))); } @@ -217,9 +217,9 @@ send(std::shared_ptr w) cr_.reason = "Client is too slow."; do_close_ = true; wq_.erase(std::next(wq_.begin()), wq_.end()); + return; } - else - wq_.emplace_back(std::move(w)); + wq_.emplace_back(std::move(w)); if(wq_.size() == 1) on_write({}); } @@ -254,10 +254,10 @@ complete() template void BaseWSPeer:: -on_write_sb(error_code const& ec) +on_ws_handshake(error_code const& ec) { if(ec) - return fail(ec, "write_resp"); + return fail(ec, "on_ws_handshake"); do_read(); }