Quellcode durchsuchen

LibThreading: Fix BackgroundAction result use-after-free

We need to move the result out of the BackgroundAction object before
posting the completion callback as there is a chance the
BackgroundAction instance gets freed before the event loop runs our
callback.

Fixes #7641
Tom vor 4 Jahren
Ursprung
Commit
b2e6088bff
1 geänderte Dateien mit 2 neuen und 2 gelöschten Zeilen
  1. 2 2
      Userland/Libraries/LibThreading/BackgroundAction.h

+ 2 - 2
Userland/Libraries/LibThreading/BackgroundAction.h

@@ -66,8 +66,8 @@ private:
         enqueue_work([this] {
             m_result = m_action(*this);
             if (m_on_complete) {
-                Core::EventLoop::current().post_event(*this, make<Core::DeferredInvocationEvent>([this](auto&) {
-                    m_on_complete(m_result.release_value());
+                Core::EventLoop::current().post_event(*this, make<Core::DeferredInvocationEvent>([this, result = m_result.release_value()](auto&) {
+                    m_on_complete(result);
                     this->remove_from_parent();
                 }));
                 Core::EventLoop::wake();