Jelajahi Sumber

LibWeb: Use Core::Timer instead of Platform::Timer in HTML::Timer

By using Core::Timer that accepts Function instead of JS::SafeFunction
in Platform::Timer does we fix memory leak caused by circular
dependency of timer's callback and timer itself.
Aliaksandr Kalenik 1 tahun lalu
induk
melakukan
883a97984c

+ 3 - 3
Userland/Libraries/LibWeb/HTML/Timer.cpp

@@ -4,10 +4,10 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <LibCore/Timer.h>
 #include <LibJS/Runtime/Object.h>
 #include <LibWeb/HTML/Timer.h>
 #include <LibWeb/HTML/Window.h>
-#include <LibWeb/Platform/Timer.h>
 
 namespace Web::HTML {
 
@@ -21,9 +21,9 @@ Timer::Timer(JS::Object& window_or_worker_global_scope, i32 milliseconds, Functi
     , m_callback(move(callback))
     , m_id(id)
 {
-    m_timer = Platform::Timer::create_single_shot(milliseconds, [this] {
+    m_timer = Core::Timer::create_single_shot(milliseconds, [this] {
         m_callback();
-    });
+    }).release_value_but_fixme_should_propagate_errors();
 }
 
 void Timer::visit_edges(Cell::Visitor& visitor)

+ 1 - 1
Userland/Libraries/LibWeb/HTML/Timer.h

@@ -31,7 +31,7 @@ private:
 
     virtual void visit_edges(Cell::Visitor&) override;
 
-    RefPtr<Platform::Timer> m_timer;
+    RefPtr<Core::Timer> m_timer;
     JS::NonnullGCPtr<JS::Object> m_window_or_worker_global_scope;
     Function<void()> m_callback;
     i32 m_id { 0 };