summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2018-02-02 12:03:05 -0500
committerJackLivio <jack@livio.io>2018-02-02 12:03:05 -0500
commiteadcb0bff5b73c6010fef82c7bc34e3d5352e323 (patch)
tree09bc17142b0500bce2391638ecd6add7657861ee
parentb12728724da99ff832ee57af5c105910732e8760 (diff)
downloadsdl_core-eadcb0bff5b73c6010fef82c7bc34e3d5352e323.tar.gz
Fix shutdown after hmi reconnection
-rw-r--r--src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h3
-rw-r--r--src/components/hmi_message_handler/include/hmi_message_handler/websocket_session.h2
-rw-r--r--src/components/hmi_message_handler/src/mb_controller.cc21
-rw-r--r--src/components/hmi_message_handler/src/websocket_session.cc14
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