From 8b94976b794d42d68726c8ad753bcf5bc94f4586 Mon Sep 17 00:00:00 2001 From: Abit Date: Wed, 24 Jun 2020 12:08:55 +0200 Subject: [PATCH] Fix race condition in websocket server close Note: the close() functions are not yet used in bitshares-core, but only in tests in FC. The new code is not fully thread-safe either. --- src/network/http/websocket.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/network/http/websocket.cpp b/src/network/http/websocket.cpp index 2819967..0f3aabb 100644 --- a/src/network/http/websocket.cpp +++ b/src/network/http/websocket.cpp @@ -665,8 +665,9 @@ namespace fc { namespace http { void websocket_server::close() { + auto cpy_con = my->_connections; websocketpp::lib::error_code ec; - for( auto& connection : my->_connections ) + for( auto& connection : cpy_con ) my->_server.close( connection.first, websocketpp::close::status::normal, "Goodbye", ec ); } @@ -709,8 +710,9 @@ namespace fc { namespace http { void websocket_tls_server::close() { + auto cpy_con = my->_connections; websocketpp::lib::error_code ec; - for( auto& connection : my->_connections ) + for( auto& connection : cpy_con ) my->_server.close( connection.first, websocketpp::close::status::normal, "Goodbye", ec ); }