Parcourir la source

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.
Dan Klishch il y a 1 an
Parent
commit
bed4af6fef

+ 1 - 1
Ladybird/AppKit/Application/EventLoopImplementation.h

@@ -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;

+ 5 - 8
Ladybird/AppKit/Application/EventLoopImplementation.mm

@@ -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()) {
-        CFRunLoopTimerInvalidate(*timer);
-        CFRelease(*timer);
-        return true;
-    }
-
-    return false;
+    auto timer = thread_data.timers.take(timer_id);
+    VERIFY(timer.has_value());
+    CFRunLoopTimerInvalidate(*timer);
+    CFRelease(*timer);
 }
 
 static void socket_notifier(CFSocketRef socket, CFSocketCallBackType notification_type, CFDataRef, void const*, void* info)

+ 2 - 2
Ladybird/Qt/EventLoopImplementationQt.cpp

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

+ 1 - 1
Ladybird/Qt/EventLoopImplementationQt.h

@@ -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;

+ 2 - 2
Userland/Libraries/LibCore/EventLoop.cpp

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

+ 1 - 1
Userland/Libraries/LibCore/EventLoop.h

@@ -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&);

+ 1 - 1
Userland/Libraries/LibCore/EventLoopImplementation.h

@@ -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;

+ 2 - 2
Userland/Libraries/LibCore/EventLoopImplementationUnix.cpp

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

+ 1 - 1
Userland/Libraries/LibCore/EventLoopImplementationUnix.h

@@ -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;

+ 1 - 4
Userland/Libraries/LibCore/EventReceiver.cpp

@@ -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;
 }