@@ -25,13 +25,10 @@ multiplexer::elem::elem(request const& req, pipeline_adapter_type adapter)
25
25
};
26
26
}
27
27
28
- auto multiplexer::elem::notify_error (system::error_code ec) noexcept -> void
28
+ auto multiplexer::elem::set_error (system::error_code const & ec) noexcept -> void
29
29
{
30
- if (!ec_) {
30
+ if (!ec_)
31
31
ec_ = ec;
32
- }
33
-
34
- notify_done ();
35
32
}
36
33
37
34
auto multiplexer::elem::commit_response (std::size_t read_size) -> void
@@ -40,7 +37,7 @@ auto multiplexer::elem::commit_response(std::size_t read_size) -> void
40
37
--remaining_responses_;
41
38
}
42
39
43
- bool multiplexer::remove (std::shared_ptr<elem> const & ptr)
40
+ bool multiplexer::remove (elem_ptr_type const & ptr)
44
41
{
45
42
if (ptr->is_waiting ()) {
46
43
reqs_.erase (std::remove (std::begin (reqs_), std::end (reqs_), ptr));
@@ -68,7 +65,7 @@ std::size_t multiplexer::commit_write()
68
65
return release_push_requests ();
69
66
}
70
67
71
- void multiplexer::add (std::shared_ptr<elem> const & info)
68
+ void multiplexer::add (elem_ptr_type const & info)
72
69
{
73
70
reqs_.push_back (info);
74
71
@@ -118,7 +115,8 @@ std::pair<tribool, std::size_t> multiplexer::consume_next(system::error_code& ec
118
115
return std::make_pair (std::nullopt, 0 );
119
116
120
117
if (ec) {
121
- reqs_.front ()->notify_error (ec);
118
+ reqs_.front ()->set_error (ec);
119
+ reqs_.front ()->notify_done ();
122
120
reqs_.pop_front ();
123
121
return std::make_pair (std::make_optional (true ), 0 );
124
122
}
@@ -179,7 +177,8 @@ std::size_t multiplexer::cancel_waiting()
179
177
auto const ret = std::distance (point, std::end (reqs_));
180
178
181
179
std::for_each (point, std::end (reqs_), [](auto const & ptr) {
182
- ptr->notify_error ({asio::error::operation_aborted});
180
+ ptr->set_error ({asio::error::operation_aborted});
181
+ ptr->notify_done ();
183
182
});
184
183
185
184
reqs_.erase (point, std::end (reqs_));
@@ -210,7 +209,8 @@ auto multiplexer::cancel_on_conn_lost() -> std::size_t
210
209
auto const ret = std::distance (point, std::end (reqs_));
211
210
212
211
std::for_each (point, std::end (reqs_), [](auto const & ptr) {
213
- ptr->notify_error ({asio::error::operation_aborted});
212
+ ptr->set_error ({asio::error::operation_aborted});
213
+ ptr->notify_done ();
214
214
});
215
215
216
216
reqs_.erase (point, std::end (reqs_));
@@ -306,7 +306,7 @@ bool multiplexer::is_waiting_response() const noexcept
306
306
bool multiplexer::is_writing () const noexcept { return !write_buffer_.empty (); }
307
307
308
308
auto make_elem (request const & req, multiplexer::pipeline_adapter_type adapter)
309
- -> std::shared_ptr< multiplexer::elem>
309
+ -> multiplexer::elem_ptr_type
310
310
{
311
311
return std::make_shared<multiplexer::elem>(req, std::move (adapter));
312
312
}
0 commit comments