LibThreading: Only run on_error callback when action wasn't canceled

This mirrors the same UAF protection for event loops used by the
on_complete callback.
This commit is contained in:
kleines Filmröllchen 2023-05-11 22:00:22 +02:00 committed by Andrew Kaster
parent 7704d89496
commit 04b44a827a
Notes: sideshowbarker 2024-07-17 04:34:25 +09:00

View file

@ -100,13 +100,15 @@ private:
error = result.release_error();
m_promise->cancel(Error::from_errno(ECANCELED));
if (m_on_error) {
if (!m_canceled && m_on_error) {
callback_scheduled = true;
origin_event_loop->deferred_invoke([this, error = move(error)]() mutable {
m_on_error(move(error));
remove_from_parent();
});
origin_event_loop->wake();
} else if (m_on_error) {
m_on_error(move(error));
}
}