mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-03 15:16:14 +00:00
Shell: Block on the existing event loop instead of pushing a new one
This patch makes `Shell::block_on_job()` pump the event loop while the job it's waiting for hasn't finished. As this no longer pushes new event loops, it has the effect of flattening the stack as well. Fixes #4976.
This commit is contained in:
committed by
Andreas Kling
parent
2bd77bc93b
commit
be94a4ffa6
@@ -1079,17 +1079,18 @@ void Shell::block_on_job(RefPtr<Job> job)
|
||||
}
|
||||
} };
|
||||
|
||||
Core::EventLoop loop;
|
||||
bool job_exited { false };
|
||||
job->on_exit = [&, old_exit = move(job->on_exit)](auto job) {
|
||||
if (old_exit)
|
||||
old_exit(job);
|
||||
loop.quit(0);
|
||||
job_exited = true;
|
||||
};
|
||||
|
||||
if (job->exited())
|
||||
return;
|
||||
|
||||
loop.exec();
|
||||
while (!job_exited)
|
||||
Core::EventLoop::current().pump();
|
||||
|
||||
// If the job is part of a pipeline, wait for the rest of the members too.
|
||||
if (auto command = job->command_ptr())
|
||||
|
||||
Reference in New Issue
Block a user