summaryrefslogtreecommitdiff
path: root/server/src/server.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2016-01-20 05:35:09 +0300
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2016-01-20 05:35:09 +0300
commit09a905e401df451f12673d75dc8d4d72ee73b7c9 (patch)
tree75e620ca41dd673f9286f3351f2982c2bbfc51e1 /server/src/server.cpp
parentbb8cd8a9ff7d80046cc2c7d41742c74d8f811c62 (diff)
server:
very basic implementation of download_state_changed event api call for plugins started work on thread safety (plugins may and will be multithreaded, so api for plugins should be thread safe)
Diffstat (limited to 'server/src/server.cpp')
-rw-r--r--server/src/server.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/server/src/server.cpp b/server/src/server.cpp
index 3c769d3..ef60cf4 100644
--- a/server/src/server.cpp
+++ b/server/src/server.cpp
@@ -28,7 +28,7 @@
#include "../../protocol/udm.pb.h"
#include "socket_wraper.h"
-extern std::list<server_session*> sessions;
+extern lockable_container<std::list<server_session*> > sessions;
@@ -51,7 +51,9 @@ server::server(boost::asio::io_service& io_service,runtime_config_s &config, std
void server::start_accept()
{
server_session* new_session = new server_session(io_service_, runtime_config, clients, downloads);
+ sessions.lock();
sessions.push_back(new_session);
+ sessions.unlock();
if(runtime_config.config_file.get<bool>("server.enable_encryption", false))
acceptor_.async_accept(new_session->socket()->get_ssl_socket().lowest_layer(), boost::bind(&server::handle_accept, this, new_session, boost::asio::placeholders::error));
else
@@ -67,9 +69,11 @@ void server::handle_accept(server_session* new_session, const boost::system::err
else
{
//TODO: implement thread safety ?
+ sessions.lock();
auto s = std::find(sessions.begin(), sessions.end(), new_session);
if(s != sessions.end())
sessions.erase(s);
+ sessions.unlock();
delete new_session;
}
start_accept();