mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 01:35:08 +02:00
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:
Notes:
github-actions[bot]
2025-12-31 09:42:55 +00:00
Author: https://github.com/Zaggy1024 Commit: https://github.com/LadybirdBrowser/ladybird/commit/fb2d9e3c85c Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/7269 Reviewed-by: https://github.com/shannonbooth
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user