Check if the callback is null again after flush()

The call to flush() may result in the _oldestCallback becoming a nullptr.
For instance, the SslConnected class might report an ssl error.
This causes the _oldestCallback to become null.
This commit is contained in:
Raoul Wols 2021-07-12 12:51:47 +02:00
parent 6df80e3b32
commit 0e6a1c52a9
No known key found for this signature in database
GPG Key ID: 9FFE06A0F6AAA2DF
1 changed files with 6 additions and 3 deletions

View File

@ -674,14 +674,17 @@ public:
// flush the queue, which will send the next operation if the current operation was synchronous
flush();
// we are going to call callbacks that could destruct the channel
Monitor monitor(this);
// copy the callback (so that it will not be destructed during
// the "reportSuccess" call, if the channel is destructed during the call)
auto cb = _oldestCallback;
// the call to flush might have caused the callback to have been invoked; check once more
if (!cb) return false;
// we are going to call callbacks that could destruct the channel
Monitor monitor(this);
// call the callback
auto next = cb->reportSuccess(std::forward<Arguments>(parameters)...);