Since `std::function` is nullable and as an `operator bool()`, we can
easily eliminate the `std::optional` overhead.
Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
(cherry picked from commit
c72dae9b6e4b37c508a3ebb1410172fb7c434e8a)
}
void AsyncConnection::_stop() {
- writeCallback.reset();
+ writeCallback = {};
dispatch_queue->discard_queue(conn_id);
async_msgr->unregister_conn(this);
worker->release_worker();
recv_start_time = ceph::mono_clock::now();
write_lock.lock();
if (writeCallback) {
- auto callback = *writeCallback;
- writeCallback.reset();
+ auto callback = std::move(writeCallback);
write_lock.unlock();
callback(0);
return;
std::unique_ptr<Protocol> protocol;
- std::optional<std::function<void(ssize_t)>> writeCallback;
+ std::function<void(ssize_t)> writeCallback;
std::function<void(char *, ssize_t)> readCallback;
std::optional<unsigned> pendingReadLen;
char *read_buffer;
// clean read and write callbacks
connection->pendingReadLen.reset();
- connection->writeCallback.reset();
+ connection->writeCallback = {};
if (state > THROTTLE_MESSAGE && state <= READ_FOOTER_AND_DISPATCH &&
connection->policy.throttler_messages) {
// clean read and write callbacks
connection->pendingReadLen.reset();
- connection->writeCallback.reset();
+ connection->writeCallback = {};
next_tag = static_cast<Tag>(0);