LibCore+LibWeb: Remove the dummy EventReceiver from deferred_invoke()

The DeferredInvocationContext only existed to satisfy the requirement
in ThreadEventQueue that each event has an EventReceiver. However,
deferred_invoke() was not even using the EventReceiver to call its
callback. Therefore, we don't need to allocate one for every deferred
invocation.

This also prevents WeakPtr::strong_ref() from racing and leaking the
context object when invoking a function across threads.
This commit is contained in:
Zaggy1024
2025-12-02 01:31:00 -06:00
committed by Gregory Bertilson
parent 970100e789
commit b572ae95a9
Notes: github-actions[bot] 2025-12-03 03:21:58 +00:00
14 changed files with 24 additions and 47 deletions

View File

@@ -8,6 +8,7 @@
#include <AK/NonnullOwnPtr.h>
#include <AK/OwnPtr.h>
#include <LibCore/Forward.h>
namespace Core {
@@ -25,7 +26,7 @@ public:
size_t process();
// Posts an event to the event queue.
void post_event(EventReceiver& receiver, NonnullOwnPtr<Event>);
void post_event(EventReceiver*, NonnullOwnPtr<Event>);
// Used by Threading::BackgroundAction.
void add_job(NonnullRefPtr<Promise<NonnullRefPtr<EventReceiver>>>);