mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-08 05:27:14 +09:00

This method was removed in e015a43b51
However, it was not exactly *unused* as the commit message would say.
This method was the only thing that allowed spin_until to exit when
the event loop was cancelled. This happens normally when IPC connections
are closed, but also when the process is killed.
The logic to properly handle process exit from event loop spins needs to
actually notify the caller that their goal condition was not met though.
That will be handled in a later commit.
65 lines
2 KiB
C++
65 lines
2 KiB
C++
/*
|
|
* Copyright (c) 2023, Andreas Kling <andreas@ladybird.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Time.h>
|
|
#include <LibCore/EventLoopImplementation.h>
|
|
|
|
namespace Core {
|
|
|
|
class EventLoopManagerUnix final : public EventLoopManager {
|
|
public:
|
|
virtual ~EventLoopManagerUnix() override;
|
|
|
|
virtual NonnullOwnPtr<EventLoopImplementation> make_implementation() override;
|
|
|
|
virtual intptr_t register_timer(EventReceiver&, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible) override;
|
|
virtual void unregister_timer(intptr_t timer_id) override;
|
|
|
|
virtual void register_notifier(Notifier&) override;
|
|
virtual void unregister_notifier(Notifier&) override;
|
|
|
|
virtual void did_post_event() override;
|
|
|
|
virtual int register_signal(int signal_number, Function<void(int)> handler) override;
|
|
virtual void unregister_signal(int handler_id) override;
|
|
|
|
void wait_for_events(EventLoopImplementation::PumpMode);
|
|
static Optional<MonotonicTime> get_next_timer_expiration();
|
|
|
|
private:
|
|
void dispatch_signal(int signal_number);
|
|
static void handle_signal(int signal_number);
|
|
};
|
|
|
|
class EventLoopImplementationUnix final : public EventLoopImplementation {
|
|
public:
|
|
static NonnullOwnPtr<EventLoopImplementationUnix> create() { return make<EventLoopImplementationUnix>(); }
|
|
|
|
EventLoopImplementationUnix();
|
|
virtual ~EventLoopImplementationUnix();
|
|
|
|
virtual int exec() override;
|
|
virtual size_t pump(PumpMode) override;
|
|
virtual void quit(int) override;
|
|
virtual bool was_exit_requested() const override { return m_exit_requested; }
|
|
|
|
virtual void wake() override;
|
|
|
|
virtual void post_event(EventReceiver& receiver, NonnullOwnPtr<Event>&&) override;
|
|
|
|
private:
|
|
bool m_exit_requested { false };
|
|
int m_exit_code { 0 };
|
|
|
|
// The wake pipe of this event loop needs to be accessible from other threads.
|
|
Array<int, 2>& m_wake_pipe_fds;
|
|
};
|
|
|
|
using EventLoopManagerPlatform = EventLoopManagerUnix;
|
|
|
|
}
|