@@ -54,10 +54,9 @@ namespace SimpleWeb {
5454
5555 class SendData {
5656 public:
57- SendData (std::shared_ptr<Connection> connection, std::shared_ptr< SendStream> header_stream, std::shared_ptr<SendStream> message_stream,
57+ SendData (std::shared_ptr<SendStream> header_stream, std::shared_ptr<SendStream> message_stream,
5858 const std::function<void (const boost::system::error_code)> &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
59+ header_stream (header_stream), message_stream(message_stream), callback(callback) {}
6160 std::shared_ptr<SendStream> header_stream;
6261 std::shared_ptr<SendStream> message_stream;
6362 std::function<void (const boost::system::error_code)> callback;
@@ -70,34 +69,31 @@ namespace SimpleWeb {
7069
7170 std::list<SendData> send_queue;
7271
73- void send_from_queue () {
74- strand.post ([this ]() {
72+ void send_from_queue (std::shared_ptr<Connection> connection ) {
73+ strand.post ([this , connection ]() {
7574 boost::asio::async_write (*socket, send_queue.begin ()->header_stream ->streambuf ,
76- strand.wrap ([this ](const boost::system::error_code& ec, size_t /* bytes_transferred*/ ) {
75+ strand.wrap ([this , connection ](const boost::system::error_code& ec, size_t /* bytes_transferred*/ ) {
7776 if (!ec) {
7877 boost::asio::async_write (*socket, send_queue.begin ()->message_stream ->streambuf ,
79- strand.wrap ([this ]
78+ strand.wrap ([this , connection ]
8079 (const boost::system::error_code& ec, size_t /* bytes_transferred*/ ) {
8180 auto send_queued=send_queue.begin ();
8281 if (send_queued->callback )
8382 send_queued->callback (ec);
8483 if (!ec) {
8584 send_queue.erase (send_queued);
8685 if (send_queue.size ()>0 )
87- send_from_queue ();
88- }
89- else {
90- for (auto it=send_queue.begin ();it!=send_queue.end ();)
91- it=send_queue.erase (it);
86+ send_from_queue (connection);
9287 }
88+ else
89+ send_queue.clear ();
9390 }));
9491 }
9592 else {
9693 auto send_queued=send_queue.begin ();
9794 if (send_queued->callback )
9895 send_queued->callback (ec);
99- for (auto it=send_queue.begin ();it!=send_queue.end ();)
100- it=send_queue.erase (it);
96+ send_queue.clear ();
10197 }
10298 }));
10399 });
@@ -258,9 +254,9 @@ namespace SimpleWeb {
258254 header_stream->put (static_cast <unsigned char >(length));
259255
260256 connection->strand .post ([this , connection, header_stream, message_stream, callback]() {
261- connection->send_queue .emplace_back (connection, header_stream, message_stream, callback);
257+ connection->send_queue .emplace_back (header_stream, message_stream, callback);
262258 if (connection->send_queue .size ()==1 )
263- connection->send_from_queue ();
259+ connection->send_from_queue (connection );
264260 });
265261 }
266262
0 commit comments