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.
This commit is contained in:
Aliaksandr Kalenik 2023-09-26 11:53:37 +02:00 committed by Andreas Kling
parent 67c727177e
commit 883a97984c
Notes: sideshowbarker 2024-07-17 02:38:39 +09:00
2 changed files with 4 additions and 4 deletions

View file

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

View file

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