Minor cleanup in send_from_queue

This commit is contained in:
eidheim 2019-06-03 12:12:33 +02:00
commit 3fcf628657

View file

@ -77,30 +77,32 @@ namespace SimpleWeb {
auto lock = self->session->connection->handler_runner->continue_lock();
if(!lock)
return;
std::unique_lock<std::mutex> send_queue_lock(self->send_queue_mutex);
if(!ec) {
auto it = self->send_queue.begin();
auto callback = std::move(it->second);
self->send_queue.erase(it);
if(self->send_queue.size() > 0)
self->send_from_queue();
{
std::unique_lock<std::mutex> lock(self->send_queue_mutex);
if(!ec) {
auto it = self->send_queue.begin();
auto callback = std::move(it->second);
self->send_queue.erase(it);
if(self->send_queue.size() > 0)
self->send_from_queue();
send_queue_lock.unlock();
if(callback)
callback(ec);
}
else {
// All handlers in the queue is called with ec:
std::vector<std::function<void(const error_code &)>> callbacks;
for(auto &pair : self->send_queue) {
if(pair.second)
callbacks.emplace_back(std::move(pair.second));
lock.unlock();
if(callback)
callback(ec);
}
self->send_queue.clear();
else {
// All handlers in the queue is called with ec:
std::vector<std::function<void(const error_code &)>> callbacks;
for(auto &pair : self->send_queue) {
if(pair.second)
callbacks.emplace_back(std::move(pair.second));
}
self->send_queue.clear();
send_queue_lock.unlock();
for(auto &callback : callbacks)
callback(ec);
lock.unlock();
for(auto &callback : callbacks)
callback(ec);
}
}
});
}