diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2016-01-20 05:35:09 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2016-01-20 05:35:09 +0300 |
commit | 09a905e401df451f12673d75dc8d4d72ee73b7c9 (patch) | |
tree | 75e620ca41dd673f9286f3351f2982c2bbfc51e1 /server/src/server.cpp | |
parent | bb8cd8a9ff7d80046cc2c7d41742c74d8f811c62 (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.cpp | 6 |
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(); |