From 09e4f573ce2424321a9738761dfa11139f15b467 Mon Sep 17 00:00:00 2001 From: Nathan Hourt Date: Sun, 5 May 2019 10:15:01 -0500 Subject: [PATCH] Improve websocket server close code --- src/network/http/websocket.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/network/http/websocket.cpp b/src/network/http/websocket.cpp index 75b882b..ff56e0a 100644 --- a/src/network/http/websocket.cpp +++ b/src/network/http/websocket.cpp @@ -207,6 +207,8 @@ namespace fc { namespace http { _server_thread.async( [&](){ auto new_con = std::make_shared>( _server.get_con_from_hdl(hdl) ); _on_connection( _connections[hdl] = new_con ); + if ( !_closed ) + _closed = new fc::promise(); }).wait(); }); _server.set_message_handler( [&]( connection_hdl hdl, websocket_server_type::message_ptr msg ){ @@ -290,9 +292,6 @@ namespace fc { namespace http { if( _server.is_listening() ) _server.stop_listening(); - if( _connections.size() ) - _closed = new fc::promise(); - auto cpy_con = _connections; for( auto item : cpy_con ) _server.close( item.first, 0, "server exit" ); @@ -654,8 +653,8 @@ namespace fc { namespace http { void websocket_server::synchronous_close() { close(); - while (!my->_connections.empty()) - fc::yield(); + if (my->_closed) + my->_closed->wait(); }