keep server instance in a unique_ptr
This commit is contained in:
parent
82c2ae5441
commit
8f8cb6a52f
@ -28,14 +28,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#ifndef SERVER_H
|
||||
#define SERVER_H
|
||||
|
||||
#include "../Util/StringUtil.h"
|
||||
|
||||
#include "Connection.h"
|
||||
#include "RequestHandler.h"
|
||||
|
||||
#include "../Util/make_unique.hpp"
|
||||
#include "../Util/SimpleLogger.h"
|
||||
#include "../Util/StringUtil.h"
|
||||
|
||||
#include <boost/asio.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
|
||||
#include <zlib.h>
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <thread>
|
||||
@ -44,6 +48,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
class Server
|
||||
{
|
||||
public:
|
||||
|
||||
static std::unique_ptr<Server> CreateServer(std::string &ip_address, int ip_port, unsigned requested_num_threads)
|
||||
{
|
||||
SimpleLogger().Write() << "http 1.1 compression handled by zlib version " << zlibVersion();
|
||||
const unsigned hardware_threads = std::max(1u, std::thread::hardware_concurrency());
|
||||
const unsigned real_num_threads = std::min(hardware_threads, requested_num_threads);
|
||||
return osrm::make_unique<Server>(ip_address, ip_port, real_num_threads);
|
||||
}
|
||||
|
||||
explicit Server(const std::string &address, const int port, const unsigned thread_pool_size)
|
||||
: thread_pool_size(thread_pool_size), acceptor(io_service),
|
||||
new_connection(new http::Connection(io_service, request_handler)), request_handler()
|
||||
|
@ -25,25 +25,32 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
#ifndef SERVER_FACTORY_H
|
||||
#define SERVER_FACTORY_H
|
||||
#ifndef MAKE_UNIQUE_H__
|
||||
#define MAKE_UNIQUE_H__
|
||||
|
||||
#include "Server.h"
|
||||
#include "../Util/SimpleLogger.h"
|
||||
#include <cstdlib>
|
||||
#include <memory>
|
||||
#include <type_traits>
|
||||
|
||||
#include <zlib.h>
|
||||
|
||||
struct ServerFactory
|
||||
namespace osrm
|
||||
{
|
||||
ServerFactory() = delete;
|
||||
ServerFactory(const ServerFactory &) = delete;
|
||||
static Server *CreateServer(std::string &ip_address, int ip_port, unsigned requested_num_threads)
|
||||
{
|
||||
SimpleLogger().Write() << "http 1.1 compression handled by zlib version " << zlibVersion();
|
||||
const unsigned hardware_threads = std::max(1u, std::thread::hardware_concurrency());
|
||||
const unsigned real_num_threads = std::min(hardware_threads, requested_num_threads);
|
||||
return new Server(ip_address, ip_port, real_num_threads);
|
||||
}
|
||||
};
|
||||
// Taken from http://msdn.microsoft.com/en-us/library/dn439780.asp
|
||||
// Note, that the snippet is broken there and needed minor massaging
|
||||
|
||||
#endif // SERVER_FACTORY_H
|
||||
// make_unique<T>
|
||||
template <class T, class... Types> std::unique_ptr<T> make_unique(Types &&... Args)
|
||||
{
|
||||
return (std::unique_ptr<T>(new T(std::forward<Types>(Args)...)));
|
||||
}
|
||||
|
||||
// make_unique<T[]>
|
||||
template <class T> std::unique_ptr<T> make_unique(std::size_t Size)
|
||||
{
|
||||
return (std::unique_ptr<T>(new T[Size]()));
|
||||
}
|
||||
|
||||
// make_unique<T[N]> disallowed
|
||||
template <class T, class... Types>
|
||||
typename std::enable_if<std::extent<T>::value != 0, void>::type make_unique(Types &&...) = delete;
|
||||
}
|
||||
#endif
|
@ -26,7 +26,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "Library/OSRM.h"
|
||||
#include "Server/ServerFactory.h"
|
||||
#include "Server/Server.h"
|
||||
#include "Util/GitDescription.h"
|
||||
#include "Util/ProgramOptions.h"
|
||||
#include "Util/SimpleLogger.h"
|
||||
@ -131,8 +131,8 @@ int main(int argc, const char *argv[])
|
||||
#endif
|
||||
|
||||
OSRM osrm_lib(server_paths, use_shared_memory);
|
||||
Server *routing_server =
|
||||
ServerFactory::CreateServer(ip_address, ip_port, requested_thread_num);
|
||||
auto routing_server =
|
||||
Server::CreateServer(ip_address, ip_port, requested_thread_num);
|
||||
|
||||
routing_server->GetRequestHandlerPtr().RegisterRoutingMachine(&osrm_lib);
|
||||
|
||||
@ -181,7 +181,7 @@ int main(int argc, const char *argv[])
|
||||
}
|
||||
|
||||
SimpleLogger().Write() << "freeing objects";
|
||||
delete routing_server;
|
||||
routing_server.reset();
|
||||
SimpleLogger().Write() << "shutdown completed";
|
||||
}
|
||||
catch (const std::exception &e)
|
||||
|
Loading…
Reference in New Issue
Block a user