diff options
author | JackLivio <jack@livio.io> | 2018-02-02 12:03:05 -0500 |
---|---|---|
committer | JackLivio <jack@livio.io> | 2018-02-02 12:03:05 -0500 |
commit | eadcb0bff5b73c6010fef82c7bc34e3d5352e323 (patch) | |
tree | 09bc17142b0500bce2391638ecd6add7657861ee /src/components/hmi_message_handler | |
parent | b12728724da99ff832ee57af5c105910732e8760 (diff) | |
download | sdl_core-eadcb0bff5b73c6010fef82c7bc34e3d5352e323.tar.gz |
Fix shutdown after hmi reconnection
Diffstat (limited to 'src/components/hmi_message_handler')
4 files changed, 23 insertions, 17 deletions
diff --git a/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h b/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h index a8ec3f88bb..6ef5dc4e3e 100644 --- a/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h +++ b/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h @@ -140,6 +140,9 @@ namespace NsMessageBroker { int mControllersIdCounter; //Registry + std::vector <std::shared_ptr<NsMessageBroker::WebsocketSession>> mConnectionList; + sync_primitives::Lock mConnectionListLock; + std::map <std::string, WebsocketSession*> mControllersList; sync_primitives::Lock mControllersListLock; diff --git a/src/components/hmi_message_handler/include/hmi_message_handler/websocket_session.h b/src/components/hmi_message_handler/include/hmi_message_handler/websocket_session.h index d8a79e7ef7..24d85dbaff 100644 --- a/src/components/hmi_message_handler/include/hmi_message_handler/websocket_session.h +++ b/src/components/hmi_message_handler/include/hmi_message_handler/websocket_session.h @@ -73,8 +73,6 @@ namespace NsMessageBroker { void Accept(); - void Close(); - void Shutdown(); bool IsShuttingDown(); diff --git a/src/components/hmi_message_handler/src/mb_controller.cc b/src/components/hmi_message_handler/src/mb_controller.cc index d7fb432df2..871121fb4b 100644 --- a/src/components/hmi_message_handler/src/mb_controller.cc +++ b/src/components/hmi_message_handler/src/mb_controller.cc @@ -94,7 +94,13 @@ namespace NsMessageBroker if(shutdown_) { return; } - std::make_shared<WebsocketSession>(std::move(socket_), this)->Accept(); + std::shared_ptr<WebsocketSession> ws_ptr = std::make_shared<WebsocketSession>(std::move(socket_), this); + ws_ptr->Accept(); + + mConnectionListLock.Acquire(); + mConnectionList.push_back(ws_ptr); + mConnectionListLock.Release(); + WaitForConnection(); } @@ -190,14 +196,15 @@ namespace NsMessageBroker } void CMessageBrokerController::exitReceivingThread(){ - sync_primitives::AutoLock lock(mControllersListLock); shutdown_ = true; - std::map <std::string, WebsocketSession*>::iterator it; - for(it = mControllersList.begin(); it != mControllersList.end(); it++) { - if(!it->second->IsShuttingDown()) { - it->second->Shutdown(); - } + mConnectionListLock.Acquire(); + std::vector<std::shared_ptr<NsMessageBroker::WebsocketSession>>::iterator it; + for(it = mConnectionList.begin(); it != mConnectionList.end(); it++) { + (*it)->Shutdown(); + mConnectionList.erase(it); } + mConnectionListLock.Release(); + boost::system::error_code ec; socket_.close(); acceptor_.cancel(ec); diff --git a/src/components/hmi_message_handler/src/websocket_session.cc b/src/components/hmi_message_handler/src/websocket_session.cc index 3484278c1a..84c786fac3 100644 --- a/src/components/hmi_message_handler/src/websocket_session.cc +++ b/src/components/hmi_message_handler/src/websocket_session.cc @@ -30,18 +30,12 @@ namespace NsMessageBroker shared_from_this(), std::placeholders::_1))); } - void WebsocketSession::Close() { - ws_.async_close({}, [](boost::system::error_code){}); - } - void WebsocketSession::Shutdown() { shutdown_ = true; thread_delegate_->SetShutdown(); thread_->join(); delete thread_delegate_; threads::DeleteThread(thread_); - Close(); - } bool WebsocketSession::IsShuttingDown() { @@ -314,7 +308,9 @@ namespace NsMessageBroker void WebsocketSession::LoopThreadDelegate::exitThreadMain() { shutdown_= true; - message_queue_.Shutdown(); + if(!message_queue_.IsShuttingDown()) { + message_queue_.Shutdown(); + } } void WebsocketSession::LoopThreadDelegate::DrainQueue() { @@ -329,6 +325,8 @@ namespace NsMessageBroker void WebsocketSession::LoopThreadDelegate::SetShutdown(){ shutdown_ = true; - message_queue_.Shutdown(); + if(!message_queue_.IsShuttingDown()) { + message_queue_.Shutdown(); + } } }
\ No newline at end of file |