1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 10:38:11 +00:00

LibWeb+WebContent: Do not reference-count file request objects

There is currently a memory leak with these file request objects due to
the callback on_file_request_finish referencing itself in its capture
list. This object does not need to be reference counted or allocated on
the heap. It is only ever stored in a HashMap until a response is
received from the browser, and it is not shared.
This commit is contained in:
Timothy Flynn 2023-01-30 16:35:47 -05:00 committed by Linus Groh
parent 9bb469f324
commit 96f409ec1e
9 changed files with 29 additions and 26 deletions

View file

@ -236,9 +236,8 @@ void ResourceLoader::load(LoadRequest& request, Function<void(ReadonlyBytes, Has
if (!m_page.has_value())
return;
VERIFY(m_page.has_value());
auto file_ref = make_ref_counted<FileRequest>(url.path());
file_ref->on_file_request_finish = [this, success_callback = move(success_callback), error_callback = move(error_callback), log_success, log_failure, request, file_ref](ErrorOr<i32> file_or_error) {
FileRequest file_request(url.path(), [this, success_callback = move(success_callback), error_callback = move(error_callback), log_success, log_failure, request](ErrorOr<i32> file_or_error) {
--m_pending_loads;
if (on_load_counter_change)
on_load_counter_change();
@ -271,8 +270,9 @@ void ResourceLoader::load(LoadRequest& request, Function<void(ReadonlyBytes, Has
auto data = maybe_data.release_value();
log_success(request);
success_callback(data, {}, {});
};
m_page->client().request_file(file_ref);
});
m_page->client().request_file(move(file_request));
++m_pending_loads;
if (on_load_counter_change)