LibCore: Only wake the event loop in deferred_invoke from other threads

For some reason, writing to the wake fd from the same thread in
deferred_invoke was causing a deadlock. However, we don't actually need
to wake from the same thread, since the event loop is not waiting and
will therefore process the deferred_invoke on the next iteration.

This issue was introduced in 3742138cc3.
The deadlock could be reproduced consistently by increasing
LOCAL_STORAGE_QUOTA in StorageJar.cpp to a large value like 50 MiB.
This commit is contained in:
Zaggy1024
2025-12-29 18:16:54 -06:00
committed by Shannon Booth
parent 87c3053370
commit fb2d9e3c85
Notes: github-actions[bot] 2025-12-31 09:42:55 +00:00

View File

@@ -26,7 +26,8 @@ EventLoopImplementation::~EventLoopImplementation() = default;
void EventLoopImplementation::deferred_invoke(Function<void()>&& invokee)
{
m_thread_event_queue.deferred_invoke(move(invokee));
wake();
if (&m_thread_event_queue != ThreadEventQueue::current_or_null())
wake();
}
static EventLoopManager* s_event_loop_manager = nullptr;