From 201a61b14f92bdab30551d158b1e41f13766262d Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Thu, 10 Jun 2021 15:01:15 +0200 Subject: [PATCH] [document] Try to free memory of document->dom in document_done --- src/document/document.c | 6 ++++++ src/ecmascript/spidermonkey.c | 13 +++++++++++-- src/ecmascript/spidermonkey.h | 2 ++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/document/document.c b/src/document/document.c index 931ff4af..023ace88 100644 --- a/src/document/document.c +++ b/src/document/document.c @@ -59,6 +59,11 @@ #include "document/html/renderer.h" #include "document/options.h" #include "document/refresh.h" + +#ifdef CONFIG_ECMASCRIPT +#include "ecmascript/spidermonkey.h" +#endif + #include "main/module.h" #include "main/object.h" #include "network/dns.h" @@ -249,6 +254,7 @@ done_document(struct document *document) free_string_list(&document->onload_snippets); free_uri_list(&document->ecmascript_imports); kill_timer(&document->timeout); + free_document(document->dom); #endif free_list(document->tags); diff --git a/src/ecmascript/spidermonkey.c b/src/ecmascript/spidermonkey.c index 7be90f86..bcb84ff8 100644 --- a/src/ecmascript/spidermonkey.c +++ b/src/ecmascript/spidermonkey.c @@ -426,6 +426,16 @@ spidermonkey_check_for_exception(JSContext *ctx) { } +void +free_document(void *doc) +{ + if (!doc) { + return; + } + xmlpp::Document *docu = doc; + delete docu; +} + static void delayed_reload(void *data) { @@ -433,8 +443,7 @@ delayed_reload(void *data) assert(rel); doc_rerender_after_document_update(rel->ses); - xmlpp::Document *docu = rel->doc; - delete docu; + free_document(rel->doc); mem_free(rel); } diff --git a/src/ecmascript/spidermonkey.h b/src/ecmascript/spidermonkey.h index b6d641f4..317fbc74 100644 --- a/src/ecmascript/spidermonkey.h +++ b/src/ecmascript/spidermonkey.h @@ -21,5 +21,7 @@ int spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter, struc void spidermonkey_call_function(struct ecmascript_interpreter *interpreter, JS::HandleValue fun, struct string *ret); +void free_document(void *doc); + extern struct module spidermonkey_module; #endif