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:
parent
6df80e3b32
commit
0e6a1c52a9
|
|
@ -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)...);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue