mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 02:17:35 +00:00
LibCore+Ladybird: Make unregistering timer infallible
Let's force calling code to provide valid timer ids. No code changes are required since, surprise, nobody used this obscure functionality.
This commit is contained in:
parent
21097d1c9e
commit
bed4af6fef
10 changed files with 17 additions and 23 deletions
|
@ -17,7 +17,7 @@ public:
|
|||
virtual NonnullOwnPtr<Core::EventLoopImplementation> make_implementation() override;
|
||||
|
||||
virtual int register_timer(Core::EventReceiver&, int interval_milliseconds, bool should_reload, Core::TimerShouldFireWhenNotVisible) override;
|
||||
virtual bool unregister_timer(int timer_id) override;
|
||||
virtual void unregister_timer(int timer_id) override;
|
||||
|
||||
virtual void register_notifier(Core::Notifier&) override;
|
||||
virtual void unregister_notifier(Core::Notifier&) override;
|
||||
|
|
|
@ -82,18 +82,15 @@ int CFEventLoopManager::register_timer(Core::EventReceiver& receiver, int interv
|
|||
return timer_id;
|
||||
}
|
||||
|
||||
bool CFEventLoopManager::unregister_timer(int timer_id)
|
||||
void CFEventLoopManager::unregister_timer(int timer_id)
|
||||
{
|
||||
auto& thread_data = ThreadData::the();
|
||||
thread_data.timer_id_allocator.deallocate(timer_id);
|
||||
|
||||
if (auto timer = thread_data.timers.take(timer_id); timer.has_value()) {
|
||||
auto timer = thread_data.timers.take(timer_id);
|
||||
VERIFY(timer.has_value());
|
||||
CFRunLoopTimerInvalidate(*timer);
|
||||
CFRelease(*timer);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void socket_notifier(CFSocketRef socket, CFSocketCallBackType notification_type, CFDataRef, void const*, void* info)
|
||||
|
|
|
@ -109,11 +109,11 @@ int EventLoopManagerQt::register_timer(Core::EventReceiver& object, int millisec
|
|||
return timer_id;
|
||||
}
|
||||
|
||||
bool EventLoopManagerQt::unregister_timer(int timer_id)
|
||||
void EventLoopManagerQt::unregister_timer(int timer_id)
|
||||
{
|
||||
auto& thread_data = ThreadData::the();
|
||||
thread_data.timer_id_allocator.deallocate(timer_id);
|
||||
return thread_data.timers.remove(timer_id);
|
||||
VERIFY(thread_data.timers.remove(timer_id));
|
||||
}
|
||||
|
||||
static void qt_notifier_activated(Core::Notifier& notifier)
|
||||
|
|
|
@ -27,7 +27,7 @@ public:
|
|||
virtual NonnullOwnPtr<Core::EventLoopImplementation> make_implementation() override;
|
||||
|
||||
virtual int register_timer(Core::EventReceiver&, int milliseconds, bool should_reload, Core::TimerShouldFireWhenNotVisible) override;
|
||||
virtual bool unregister_timer(int timer_id) override;
|
||||
virtual void unregister_timer(int timer_id) override;
|
||||
|
||||
virtual void register_notifier(Core::Notifier&) override;
|
||||
virtual void unregister_notifier(Core::Notifier&) override;
|
||||
|
|
|
@ -130,9 +130,9 @@ int EventLoop::register_timer(EventReceiver& object, int milliseconds, bool shou
|
|||
return EventLoopManager::the().register_timer(object, milliseconds, should_reload, fire_when_not_visible);
|
||||
}
|
||||
|
||||
bool EventLoop::unregister_timer(int timer_id)
|
||||
void EventLoop::unregister_timer(int timer_id)
|
||||
{
|
||||
return EventLoopManager::the().unregister_timer(timer_id);
|
||||
EventLoopManager::the().unregister_timer(timer_id);
|
||||
}
|
||||
|
||||
void EventLoop::register_notifier(Badge<Notifier>, Notifier& notifier)
|
||||
|
|
|
@ -77,7 +77,7 @@ public:
|
|||
|
||||
// The registration functions act upon the current loop of the current thread.
|
||||
static int register_timer(EventReceiver&, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible);
|
||||
static bool unregister_timer(int timer_id);
|
||||
static void unregister_timer(int timer_id);
|
||||
|
||||
static void register_notifier(Badge<Notifier>, Notifier&);
|
||||
static void unregister_notifier(Badge<Notifier>, Notifier&);
|
||||
|
|
|
@ -24,7 +24,7 @@ public:
|
|||
virtual NonnullOwnPtr<EventLoopImplementation> make_implementation() = 0;
|
||||
|
||||
virtual int register_timer(EventReceiver&, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible) = 0;
|
||||
virtual bool unregister_timer(int timer_id) = 0;
|
||||
virtual void unregister_timer(int timer_id) = 0;
|
||||
|
||||
virtual void register_notifier(Notifier&) = 0;
|
||||
virtual void unregister_notifier(Notifier&) = 0;
|
||||
|
|
|
@ -509,11 +509,11 @@ int EventLoopManagerUnix::register_timer(EventReceiver& object, int milliseconds
|
|||
return timer_id;
|
||||
}
|
||||
|
||||
bool EventLoopManagerUnix::unregister_timer(int timer_id)
|
||||
void EventLoopManagerUnix::unregister_timer(int timer_id)
|
||||
{
|
||||
auto& thread_data = ThreadData::the();
|
||||
thread_data.id_allocator.deallocate(timer_id);
|
||||
return thread_data.timers.remove(timer_id);
|
||||
VERIFY(thread_data.timers.remove(timer_id));
|
||||
}
|
||||
|
||||
void EventLoopManagerUnix::register_notifier(Notifier& notifier)
|
||||
|
|
|
@ -18,7 +18,7 @@ public:
|
|||
virtual NonnullOwnPtr<EventLoopImplementation> make_implementation() override;
|
||||
|
||||
virtual int register_timer(EventReceiver&, int milliseconds, bool should_reload, TimerShouldFireWhenNotVisible) override;
|
||||
virtual bool unregister_timer(int timer_id) override;
|
||||
virtual void unregister_timer(int timer_id) override;
|
||||
|
||||
virtual void register_notifier(Notifier&) override;
|
||||
virtual void unregister_notifier(Notifier&) override;
|
||||
|
|
|
@ -129,10 +129,7 @@ void EventReceiver::stop_timer()
|
|||
{
|
||||
if (!m_timer_id)
|
||||
return;
|
||||
bool success = Core::EventLoop::unregister_timer(m_timer_id);
|
||||
if (!success) {
|
||||
dbgln("{:p} could not unregister timer {}", this, m_timer_id);
|
||||
}
|
||||
Core::EventLoop::unregister_timer(m_timer_id);
|
||||
m_timer_id = 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue