@@ -54,9 +54,10 @@ namespace SimpleWeb {
54
54
55
55
class SendData {
56
56
public:
57
- SendData (std::shared_ptr<SendStream> header_stream, std::shared_ptr<SendStream> message_stream,
57
+ SendData (std::shared_ptr<Connection> connection, std::shared_ptr< SendStream> header_stream, std::shared_ptr<SendStream> message_stream,
58
58
const std::function<void (const boost::system::error_code)> &callback) :
59
- header_stream (header_stream), message_stream(message_stream), callback(callback) {}
59
+ connection (connection), header_stream(header_stream), message_stream(message_stream), callback(callback) {}
60
+ std::shared_ptr<Connection> connection; // Added to keep the connection object alive
60
61
std::shared_ptr<SendStream> header_stream;
61
62
std::shared_ptr<SendStream> message_stream;
62
63
std::function<void (const boost::system::error_code)> callback;
@@ -71,10 +72,6 @@ namespace SimpleWeb {
71
72
72
73
void send_from_queue () {
73
74
strand.post ([this ]() {
74
- if (!socket) {
75
- return ;
76
- }
77
-
78
75
boost::asio::async_write (*socket, send_queue.begin ()->header_stream ->streambuf ,
79
76
strand.wrap ([this ](const boost::system::error_code& ec, size_t /* bytes_transferred*/ ) {
80
77
if (!ec) {
@@ -258,7 +255,7 @@ namespace SimpleWeb {
258
255
header_stream->put (static_cast <unsigned char >(length));
259
256
260
257
connection->strand .post ([this , connection, header_stream, message_stream, callback]() {
261
- connection->send_queue .emplace_back (header_stream, message_stream, callback);
258
+ connection->send_queue .emplace_back (connection, header_stream, message_stream, callback);
262
259
if (connection->send_queue .size ()==1 )
263
260
connection->send_from_queue ();
264
261
});
0 commit comments