Bläddra i källkod

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.
kleines Filmröllchen 2 år sedan
förälder
incheckning
04b44a827a
1 ändrade filer med 3 tillägg och 1 borttagningar
  1. 3 1
      Userland/Libraries/LibThreading/BackgroundAction.h

+ 3 - 1
Userland/Libraries/LibThreading/BackgroundAction.h

@@ -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));
                 }
             }