diff --git a/src/js/spidermonkey-shared.cpp b/src/js/spidermonkey-shared.cpp index 8ca6cfecd..de5be00d5 100644 --- a/src/js/spidermonkey-shared.cpp +++ b/src/js/spidermonkey-shared.cpp @@ -75,6 +75,14 @@ spidermonkey_runtime_release(void) } } +void +spidermonkey_release_all_runtimes(void) +{ + while (spidermonkey_runtime_refcount > 0) { + spidermonkey_runtime_release(); + } +} + /** An ELinks-specific replacement for JS_DefineFunctions(). * * @relates spidermonkeyFunctionSpec */ diff --git a/src/js/spidermonkey-shared.h b/src/js/spidermonkey-shared.h index 23ad09691..a6fd057e6 100644 --- a/src/js/spidermonkey-shared.h +++ b/src/js/spidermonkey-shared.h @@ -12,6 +12,7 @@ extern JSContext *main_ctx; extern long spidermonkey_memory_limit; int spidermonkey_runtime_addref(void); void spidermonkey_runtime_release(void); +void spidermonkey_release_all_runtimes(void); /** An ELinks-specific replacement for JSFunctionSpec. * diff --git a/src/js/spidermonkey.cpp b/src/js/spidermonkey.cpp index 7df989687..eef199156 100644 --- a/src/js/spidermonkey.cpp +++ b/src/js/spidermonkey.cpp @@ -160,8 +160,9 @@ spidermonkey_init(struct module *module) static void spidermonkey_done(struct module *xxx) { - if (js_module_init_ok) - spidermonkey_runtime_release(); + if (js_module_init_ok) { + spidermonkey_release_all_runtimes(); + } } static const char *