1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 10:48:11 +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:
AnotherTest 2021-01-20 00:29:40 +03:30 committed by Andreas Kling
parent 2bd77bc93b
commit be94a4ffa6

View file

@ -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())