*Fixes #135: memory leak that was introduces Jun 17, 2017 in e1aebba344
This commit is contained in:
parent
c9c6ee3d98
commit
20d3c44366
1 changed files with 11 additions and 6 deletions
|
|
@ -93,6 +93,7 @@ namespace SimpleWeb {
|
||||||
query=std::unique_ptr<asio::ip::tcp::resolver::query>(new asio::ip::tcp::resolver::query(proxy_host_port.first, std::to_string(proxy_host_port.second)));
|
query=std::unique_ptr<asio::ip::tcp::resolver::query>(new asio::ip::tcp::resolver::query(proxy_host_port.first, std::to_string(proxy_host_port.second)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string host;
|
std::string host;
|
||||||
unsigned short port;
|
unsigned short port;
|
||||||
Config config;
|
Config config;
|
||||||
|
|
@ -161,16 +162,18 @@ namespace SimpleWeb {
|
||||||
void request(const std::string &method, const std::string &path, string_view content, const CaseInsensitiveMultimap& header,
|
void request(const std::string &method, const std::string &path, string_view content, const CaseInsensitiveMultimap& header,
|
||||||
std::function<void(std::shared_ptr<Response>, const error_code&)> &&request_callback_) {
|
std::function<void(std::shared_ptr<Response>, const error_code&)> &&request_callback_) {
|
||||||
auto session=std::make_shared<Session>(io_service, get_connection(), create_request_header(method, path, header));
|
auto session=std::make_shared<Session>(io_service, get_connection(), create_request_header(method, path, header));
|
||||||
|
auto connection=session->connection;
|
||||||
|
auto response=session->response;
|
||||||
auto request_callback=std::make_shared<std::function<void(std::shared_ptr<Response>, const error_code&)>>(std::move(request_callback_));
|
auto request_callback=std::make_shared<std::function<void(std::shared_ptr<Response>, const error_code&)>>(std::move(request_callback_));
|
||||||
auto connections_mutex=this->connections_mutex;
|
auto connections_mutex=this->connections_mutex;
|
||||||
session->callback=[session, request_callback, connections_mutex](const error_code &ec) {
|
session->callback=[connection, response, request_callback, connections_mutex](const error_code &ec) {
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(*connections_mutex);
|
std::lock_guard<std::mutex> lock(*connections_mutex);
|
||||||
session->connection->in_use=false;
|
connection->in_use=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*request_callback)
|
if(*request_callback)
|
||||||
(*request_callback)(session->response, ec);
|
(*request_callback)(response, ec);
|
||||||
};
|
};
|
||||||
|
|
||||||
std::ostream write_stream(session->request_buffer.get());
|
std::ostream write_stream(session->request_buffer.get());
|
||||||
|
|
@ -202,16 +205,18 @@ namespace SimpleWeb {
|
||||||
void request(const std::string &method, const std::string &path, std::istream& content, const CaseInsensitiveMultimap& header,
|
void request(const std::string &method, const std::string &path, std::istream& content, const CaseInsensitiveMultimap& header,
|
||||||
std::function<void(std::shared_ptr<Response>, const error_code&)> &&request_callback_) {
|
std::function<void(std::shared_ptr<Response>, const error_code&)> &&request_callback_) {
|
||||||
auto session=std::make_shared<Session>(io_service, get_connection(), create_request_header(method, path, header));
|
auto session=std::make_shared<Session>(io_service, get_connection(), create_request_header(method, path, header));
|
||||||
|
auto connection=session->connection;
|
||||||
|
auto response=session->response;
|
||||||
auto request_callback=std::make_shared<std::function<void(std::shared_ptr<Response>, const error_code&)>>(std::move(request_callback_));
|
auto request_callback=std::make_shared<std::function<void(std::shared_ptr<Response>, const error_code&)>>(std::move(request_callback_));
|
||||||
auto connections_mutex=this->connections_mutex;
|
auto connections_mutex=this->connections_mutex;
|
||||||
session->callback=[session, request_callback, connections_mutex](const error_code &ec) {
|
session->callback=[connection, response, request_callback, connections_mutex](const error_code &ec) {
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(*connections_mutex);
|
std::lock_guard<std::mutex> lock(*connections_mutex);
|
||||||
session->connection->in_use=false;
|
connection->in_use=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*request_callback)
|
if(*request_callback)
|
||||||
(*request_callback)(session->response, ec);
|
(*request_callback)(response, ec);
|
||||||
};
|
};
|
||||||
|
|
||||||
content.seekg(0, std::ios::end);
|
content.seekg(0, std::ios::end);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue