From 4910132853ad68dbe8f4e7710dd098120d1b9b95 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Tue, 25 Jan 2022 19:19:30 +0800 Subject: [PATCH 1/3] jsauthority: ensure to call JS_Init() and JS_ShutDown() exactly once Before this commit, we were calling JS_Init() in polkit_backend_js_authority_class_init and never called JS_ShutDown. This is actually a misusage of SpiderMonkey API. Quote from a comment in js/Initialization.h (both mozjs-78 and mozjs-91): It is currently not possible to initialize SpiderMonkey multiple times (that is, calling JS_Init/JSAPI methods/JS_ShutDown in that order, then doing so again). This misusage does not cause severe issues with mozjs-78. However, when we eventually port jsauthority to use mozjs-91, bad thing will happen: see the test failure mentioned in #150. This commit is tested with both mozjs-78 and mozjs-91, all tests pass with it. --- src/polkitbackend/polkitbackendjsauthority.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/polkitbackend/polkitbackendjsauthority.cpp b/src/polkitbackend/polkitbackendjsauthority.cpp index ca17108..b22c34e 100644 --- a/src/polkitbackend/polkitbackendjsauthority.cpp +++ b/src/polkitbackend/polkitbackendjsauthority.cpp @@ -75,6 +75,13 @@ /* ---------------------------------------------------------------------------------------------------- */ +static class JsInitHelperType +{ +public: + JsInitHelperType() { JS_Init(); } + ~JsInitHelperType() { JS_ShutDown(); } +} JsInitHelper; + struct _PolkitBackendJsAuthorityPrivate { gchar **rules_dirs; @@ -589,7 +596,6 @@ polkit_backend_js_authority_finalize (GObject *object) delete authority->priv->js_polkit; JS_DestroyContext (authority->priv->cx); - /* JS_ShutDown (); */ G_OBJECT_CLASS (polkit_backend_js_authority_parent_class)->finalize (object); } @@ -666,7 +672,6 @@ polkit_backend_js_authority_class_init (PolkitBackendJsAuthorityClass *klass) g_type_class_add_private (klass, sizeof (PolkitBackendJsAuthorityPrivate)); - JS_Init (); } /* ---------------------------------------------------------------------------------------------------- */ -- GitLab From 2b5f49a4e4266d2c327ef55e6df121511e23236b Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Tue, 25 Jan 2022 19:20:58 +0800 Subject: [PATCH 2/3] jsauthority: port to mozjs-91 --- configure.ac | 2 +- meson.build | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index e434ca2..6783ee7 100644 --- a/configure.ac +++ b/configure.ac @@ -80,7 +80,7 @@ PKG_CHECK_MODULES(GLIB, [gmodule-2.0 gio-unix-2.0 >= 2.30.0]) AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) -PKG_CHECK_MODULES(LIBJS, [mozjs-78]) +PKG_CHECK_MODULES(LIBJS, [mozjs-91]) AC_SUBST(LIBJS_CFLAGS) AC_SUBST(LIBJS_CXXFLAGS) -- diff --git a/meson.build b/meson.build index 858078d..09cce0f 100644 --- a/meson.build +++ b/meson.build @@ -133,7 +133,7 @@ expat_dep = dependency('expat') assert(cc.has_header('expat.h', dependencies: expat_dep), 'Can\'t find expat.h. Please install expat.') assert(cc.has_function('XML_ParserCreate', dependencies: expat_dep), 'Can\'t find expat library. Please install expat.') -mozjs_dep = dependency('mozjs-78') +mozjs_dep = dependency('mozjs-91') dbus_dep = dependency('dbus-1', required: false) dbus_policydir = pk_prefix / pk_datadir / 'dbus-1/system.d' -- GitLab