Accepting request 634813 from GNOME:Next
OBS-URL: https://build.opensuse.org/request/show/634813 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gjs?expand=0&rev=155
This commit is contained in:
parent
87f20a2a90
commit
168582a143
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ce21d8a83f6077b011b8834c4936281be65b2b62387f0745c3eb9adf780996fc
|
||||
size 626512
|
3
gjs-1.54.0.tar.xz
Normal file
3
gjs-1.54.0.tar.xz
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e22c63f4dbf243d7a5a6660f6443ca3e5768695a48fc9fdf078bce7cf7aa657d
|
||||
size 647552
|
@ -1,91 +0,0 @@
|
||||
From 090298512b12e76929bf8bd14dccbfd355f78dce Mon Sep 17 00:00:00 2001
|
||||
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
|
||||
Date: Fri, 30 Mar 2018 21:37:37 -0300
|
||||
Subject: [PATCH] context: Add API to force GC schedule
|
||||
|
||||
There are situations where we cannot run the
|
||||
GC right away, but we also cannot ignore the
|
||||
need of running it.
|
||||
|
||||
For those cases, add a new private function
|
||||
that forces GC to happen on idle.
|
||||
---
|
||||
gjs/context-private.h | 2 ++
|
||||
gjs/context.cpp | 29 +++++++++++++++++++++++++----
|
||||
2 files changed, 27 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/gjs/context-private.h b/gjs/context-private.h
|
||||
index 6dbe669..c45c8d0 100644
|
||||
--- a/gjs/context-private.h
|
||||
+++ b/gjs/context-private.h
|
||||
@@ -36,6 +36,8 @@ bool _gjs_context_destroying (GjsContext *js_context);
|
||||
|
||||
void _gjs_context_schedule_gc_if_needed (GjsContext *js_context);
|
||||
|
||||
+void _gjs_context_schedule_gc (GjsContext *js_context);
|
||||
+
|
||||
void _gjs_context_exit(GjsContext *js_context,
|
||||
uint8_t exit_code);
|
||||
|
||||
diff --git a/gjs/context.cpp b/gjs/context.cpp
|
||||
index c509943..77d7eaa 100644
|
||||
--- a/gjs/context.cpp
|
||||
+++ b/gjs/context.cpp
|
||||
@@ -90,6 +90,7 @@ struct _GjsContext {
|
||||
uint8_t exit_code;
|
||||
|
||||
guint auto_gc_id;
|
||||
+ bool force_gc;
|
||||
|
||||
std::array<JS::PersistentRootedId*, GJS_STRING_LAST> const_strings;
|
||||
|
||||
@@ -592,22 +593,42 @@ trigger_gc_if_needed (gpointer user_data)
|
||||
{
|
||||
GjsContext *js_context = GJS_CONTEXT(user_data);
|
||||
js_context->auto_gc_id = 0;
|
||||
- gjs_gc_if_needed(js_context->context);
|
||||
+
|
||||
+ if (js_context->force_gc)
|
||||
+ JS_GC(js_context->context);
|
||||
+ else
|
||||
+ gjs_gc_if_needed(js_context->context);
|
||||
+
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
-void
|
||||
-_gjs_context_schedule_gc_if_needed (GjsContext *js_context)
|
||||
+
|
||||
+static void
|
||||
+_gjs_context_schedule_gc_internal (GjsContext *js_context,
|
||||
+ bool force_gc)
|
||||
{
|
||||
if (js_context->auto_gc_id > 0)
|
||||
- return;
|
||||
+ g_source_remove(js_context->auto_gc_id);
|
||||
|
||||
+ js_context->force_gc = force_gc;
|
||||
js_context->auto_gc_id = g_idle_add_full(G_PRIORITY_LOW,
|
||||
trigger_gc_if_needed,
|
||||
js_context, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
+_gjs_context_schedule_gc (GjsContext *js_context)
|
||||
+{
|
||||
+ _gjs_context_schedule_gc_internal(js_context, true);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+_gjs_context_schedule_gc_if_needed (GjsContext *js_context)
|
||||
+{
|
||||
+ _gjs_context_schedule_gc_internal(js_context, false);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
_gjs_context_exit(GjsContext *js_context,
|
||||
uint8_t exit_code)
|
||||
{
|
||||
--
|
||||
libgit2 0.27.0
|
||||
|
@ -1,123 +0,0 @@
|
||||
From e9e969553866b0dd29e78b41c0e372569405f46c Mon Sep 17 00:00:00 2001
|
||||
From: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
|
||||
Date: Wed, 28 Mar 2018 19:21:52 -0300
|
||||
Subject: [PATCH] object: Queue a forced GC when toggling down
|
||||
|
||||
During a GC, the collector asks each object which other
|
||||
objects that it wants to hold on to so if there's an entire
|
||||
section of the heap graph that's not connected to anything
|
||||
else, and not reachable from the root set, then it can be
|
||||
trashed all at once.
|
||||
|
||||
GObjects, however, don't work like that, there's only a
|
||||
reference count but no notion of who owns the reference so,
|
||||
a JS object that's proxying a GObject is unconditionally held
|
||||
alive as long as the GObject has >1 references.
|
||||
|
||||
Since we cannot know how many more wrapped GObjects are going
|
||||
be marked for garbage collection after the owner is destroyed,
|
||||
always queue a garbage collection when a toggle reference goes
|
||||
down.
|
||||
|
||||
Issue: #140
|
||||
---
|
||||
gi/object.cpp | 22 ++++++++++++++++++++++
|
||||
gjs/context-private.h | 2 +-
|
||||
gjs/context.cpp | 14 ++++++++------
|
||||
3 files changed, 31 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/gi/object.cpp b/gi/object.cpp
|
||||
index 3fdfced..606a918 100644
|
||||
--- a/gi/object.cpp
|
||||
+++ b/gi/object.cpp
|
||||
@@ -1001,8 +1001,30 @@ handle_toggle_down(GObject *gobj)
|
||||
* collected by the GC
|
||||
*/
|
||||
if (priv->keep_alive.rooted()) {
|
||||
+ GjsContext *context;
|
||||
+
|
||||
gjs_debug_lifecycle(GJS_DEBUG_GOBJECT, "Unrooting object");
|
||||
priv->keep_alive.switch_to_unrooted();
|
||||
+
|
||||
+ /* During a GC, the collector asks each object which other
|
||||
+ * objects that it wants to hold on to so if there's an entire
|
||||
+ * section of the heap graph that's not connected to anything
|
||||
+ * else, and not reachable from the root set, then it can be
|
||||
+ * trashed all at once.
|
||||
+ *
|
||||
+ * GObjects, however, don't work like that, there's only a
|
||||
+ * reference count but no notion of who owns the reference so,
|
||||
+ * a JS object that's proxying a GObject is unconditionally held
|
||||
+ * alive as long as the GObject has >1 references.
|
||||
+ *
|
||||
+ * Since we cannot know how many more wrapped GObjects are going
|
||||
+ * be marked for garbage collection after the owner is destroyed,
|
||||
+ * always queue a garbage collection when a toggle reference goes
|
||||
+ * down.
|
||||
+ */
|
||||
+ context = gjs_context_get_current();
|
||||
+ if (!_gjs_context_destroying(context))
|
||||
+ _gjs_context_schedule_gc(context);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/gjs/context-private.h b/gjs/context-private.h
|
||||
index c45c8d0..49c0cf9 100644
|
||||
--- a/gjs/context-private.h
|
||||
+++ b/gjs/context-private.h
|
||||
@@ -36,7 +36,7 @@ bool _gjs_context_destroying (GjsContext *js_context);
|
||||
|
||||
void _gjs_context_schedule_gc_if_needed (GjsContext *js_context);
|
||||
|
||||
-void _gjs_context_schedule_gc (GjsContext *js_context);
|
||||
+void _gjs_context_schedule_gc(GjsContext *js_context);
|
||||
|
||||
void _gjs_context_exit(GjsContext *js_context,
|
||||
uint8_t exit_code);
|
||||
diff --git a/gjs/context.cpp b/gjs/context.cpp
|
||||
index 77d7eaa..a2ce34a 100644
|
||||
--- a/gjs/context.cpp
|
||||
+++ b/gjs/context.cpp
|
||||
@@ -599,31 +599,33 @@ trigger_gc_if_needed (gpointer user_data)
|
||||
else
|
||||
gjs_gc_if_needed(js_context->context);
|
||||
|
||||
+ js_context->force_gc = false;
|
||||
+
|
||||
return G_SOURCE_REMOVE;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
-_gjs_context_schedule_gc_internal (GjsContext *js_context,
|
||||
- bool force_gc)
|
||||
+_gjs_context_schedule_gc_internal(GjsContext *js_context,
|
||||
+ bool force_gc)
|
||||
{
|
||||
if (js_context->auto_gc_id > 0)
|
||||
- g_source_remove(js_context->auto_gc_id);
|
||||
+ return;
|
||||
|
||||
- js_context->force_gc = force_gc;
|
||||
+ js_context->force_gc |= force_gc;
|
||||
js_context->auto_gc_id = g_idle_add_full(G_PRIORITY_LOW,
|
||||
trigger_gc_if_needed,
|
||||
js_context, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
-_gjs_context_schedule_gc (GjsContext *js_context)
|
||||
+_gjs_context_schedule_gc(GjsContext *js_context)
|
||||
{
|
||||
_gjs_context_schedule_gc_internal(js_context, true);
|
||||
}
|
||||
|
||||
void
|
||||
-_gjs_context_schedule_gc_if_needed (GjsContext *js_context)
|
||||
+_gjs_context_schedule_gc_if_needed(GjsContext *js_context)
|
||||
{
|
||||
_gjs_context_schedule_gc_internal(js_context, false);
|
||||
}
|
||||
--
|
||||
libgit2 0.27.0
|
||||
|
@ -1,35 +0,0 @@
|
||||
From c0420db97ea574afe80664d3835995fba0c1e47b Mon Sep 17 00:00:00 2001
|
||||
From: Carlos Garnacho <carlosg@gnome.org>
|
||||
Date: Wed, 25 Apr 2018 13:39:12 +0200
|
||||
Subject: [PATCH] context: Ensure force_gc flag is not lost if the idle is scheduled
|
||||
|
||||
If the first caller that triggers the idle happens to be non-forcing,
|
||||
all later forcing calls would be ignored.
|
||||
|
||||
https://gitlab.gnome.org/GNOME/gjs/issues/150
|
||||
|
||||
Closes: #150
|
||||
---
|
||||
gjs/context.cpp | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/gjs/context.cpp b/gjs/context.cpp
|
||||
index a2ce34a..e66a9f8 100644
|
||||
--- a/gjs/context.cpp
|
||||
+++ b/gjs/context.cpp
|
||||
@@ -609,10 +609,11 @@ static void
|
||||
_gjs_context_schedule_gc_internal(GjsContext *js_context,
|
||||
bool force_gc)
|
||||
{
|
||||
+ js_context->force_gc |= force_gc;
|
||||
+
|
||||
if (js_context->auto_gc_id > 0)
|
||||
return;
|
||||
|
||||
- js_context->force_gc |= force_gc;
|
||||
js_context->auto_gc_id = g_idle_add_full(G_PRIORITY_LOW,
|
||||
trigger_gc_if_needed,
|
||||
js_context, NULL);
|
||||
--
|
||||
libgit2 0.27.0
|
||||
|
112
gjs.changes
112
gjs.changes
@ -1,3 +1,113 @@
|
||||
-------------------------------------------------------------------
|
||||
Sun Sep 9 07:16:38 UTC 2018 - antoine.belvire@opensuse.org
|
||||
|
||||
- Update to version 1.54.0:
|
||||
+ Compatibility fix for byte arrays: the legacy toString()
|
||||
behaviour of byte arrays returned from GObject-introspected
|
||||
functions is now restored. If you use the functionality, a
|
||||
warning will be logged asking you to upgrade your code
|
||||
(glgo#GNOME/gjs#227).
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Aug 31 03:31:25 UTC 2018 - luc14n0@linuxmail.org
|
||||
|
||||
- Update to version 1.53.92:
|
||||
+ Technology preview of a GNOME 3.32 feature: native Promises for
|
||||
GIO-style asynchronous operations. Since this is a technology
|
||||
preview, we do not guarantee API stability with the version
|
||||
coming in GNOME 3.32. These APIs are marked with underscores to
|
||||
emphasize that they are not stable yet. Use them at your own
|
||||
risk.
|
||||
+ Closed bugs and merge requests:
|
||||
- Added promisify to GJS GIO overrides (glgo#GNOME/gjs!225).
|
||||
- Temporary fix for Gio.File.prototype (glgo#GNOME/gjs!226).
|
||||
- Changes from version 1.53.91:
|
||||
+ Closed bugs and merge requests:
|
||||
- Fix example eslint errors;
|
||||
- Fix more "lost" GInterface properties.
|
||||
- Changes from version 1.53.90:
|
||||
+ GJS includes a simple debugger now.
|
||||
+ New API for programs that embed GJS:
|
||||
gjs_context_setup_debugger_console().
|
||||
+ New JavaScript features! This version of GJS is based on
|
||||
SpiderMonkey 60, an upgrade from the previous ESR (Extended
|
||||
Support Release) of SpiderMonkey 52.
|
||||
+ Fixed bugs: glgo#GNOME/gjs#178, glgo#GNOME/gjs#179,
|
||||
glgo#GNOME/gjs#185, glgo#GNOME/gjs#110, CWE-126
|
||||
(glgo#GNOME/gjs#174), glgo#GNOME/gjs#149, glgo#GNOME/gjs#132,
|
||||
glgo#GNOME/gjs#161, glgo#GNOME/gjs#5, glgo#GNOME/gjs#186.
|
||||
- Changes from version 1.53.4:
|
||||
+ Refactored the way GObject properties are accessed. This should
|
||||
be a bit more efficient, as property info (GParamSpec) is now
|
||||
cached for every object type. There may still be some
|
||||
regressions from this; please be on the lookout so we can fix
|
||||
them in the next release.
|
||||
+ The memory usage for each object instance has been reduced,
|
||||
resulting in several dozens of megabytes less memory usage in
|
||||
GNOME Shell.
|
||||
+ Fixed bugs: glgo#GNOME/gjs#160, glgo#GNOME/gjs#24,
|
||||
glgo#GNOME/gjs#173, glgo#GNOME/gjs#165, glgo#GNOME/gjs#171,
|
||||
glgo#GNOME/gjs#177, glgo#GNOME/gjs#172, glgo#GNOME/gjs#182.
|
||||
- Changes from version 1.53.3:
|
||||
+ Closed bugs and merge requests:
|
||||
- Adding multiple ESLint rules for spacing.
|
||||
- Various maintenance.
|
||||
- Add pkgconfig(mozjs-60) BuildRequires while dropping its
|
||||
predecessor pkgconfig(mozjs-52) and mozjs52-devel to reflect
|
||||
upstream changes.
|
||||
- Conditionalize the use of systemtap/dtrace: they are currently
|
||||
failing.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Jul 8 01:53:03 UTC 2018 - luc14n0@linuxmail.org
|
||||
|
||||
- Update to version 1.53.3:
|
||||
+ Adding multiple ESLint rules for spacing.
|
||||
+ Various small fixes.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Jul 8 01:53:02 UTC 2018 - luc14n0@linuxmail.org
|
||||
|
||||
- Update to version 1.53.2:
|
||||
+ The `Template` parameter passed to `GObject.registerClass()`
|
||||
now accepts file:/// URIs as well as resource:/// URIs and byte
|
||||
arrays.
|
||||
+ New API: `gjs_get_js_version()` returns a string identifying
|
||||
the version of the underlying SpiderMonkey JS engine. The
|
||||
interpreter executable has also gained a `--jsversion` argument
|
||||
which will print this string.
|
||||
+ Several fixes for memory efficiency and performance.
|
||||
+ Fixed bugs:
|
||||
- Reduce memory overhead of g_object_weak_ref()
|
||||
(glgo#GNOME/gjs#144).
|
||||
- Use compacting GC on RSS size growth (glgo#GNOME/gjs#151).
|
||||
- Segfault on enumeration of GjSFileImporter properties when a
|
||||
searchpath entry contains a symlink.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sun Jul 8 01:53:01 UTC 2018 - luc14n0@linuxmail.org
|
||||
|
||||
- Update to version 1.53.1:
|
||||
+ Improvements to garbage collection performance.
|
||||
+ Now, when building a class from a UI template file signals
|
||||
defined in the UI template file will be automatically
|
||||
connected.
|
||||
+ Fixed bugs:
|
||||
- Tweener: Add min/max properties;
|
||||
- `ARGV` encoding issues (glgo#GNOME/gjs#22);
|
||||
- Make GC much more aggressive (glgo#GNOME/gjs#62);
|
||||
- Queue GC when a GObject reference is toggled down
|
||||
(glgo#GNOME/gjs#140);
|
||||
- overrides: support Gtk template callbacks;
|
||||
- Ensure not to miss the force_gc flag (glgo#GNOME/gjs#150).
|
||||
- Append LGPL-2.0-or-later to the License tag to conform to due
|
||||
source code licenses. And set LPGL-2.0-or-later License tag for
|
||||
libgjs library subpackage.
|
||||
- Drop fixed upstream patches:
|
||||
+ gjs-Add-API-to-force-GC-schedule.patch and
|
||||
+ gjs-Queue-forced-GC.patch.
|
||||
+ gjs-ensure-force_gc-flag-use.patch.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Jul 5 20:00:00 UTC 2018 - bjorn.lie@gmail.com
|
||||
|
||||
@ -198,7 +308,7 @@ Tue Oct 31 22:54:17 UTC 2017 - luc14n0@linuxmail.org
|
||||
+ Minor bugfixes.
|
||||
- Update Url to https://wiki.gnome.org/Projects/Gjs: current Gjs'
|
||||
project web page.
|
||||
- Alignment BuildRequires with configure:
|
||||
- Align BuildRequires with configure:
|
||||
+ Add pkgconfig(*): cairo-gobject, gio-2.0, gobject-2.0 and
|
||||
gthread-2.0.
|
||||
+ Drop pkgconfig(libmozjs-52) and libxml2-tools.
|
||||
|
26
gjs.spec
26
gjs.spec
@ -16,22 +16,19 @@
|
||||
#
|
||||
|
||||
|
||||
# TODO: systemtap/dtrace is currently (1.53.91) failing, when
|
||||
# https://gitlab.gnome.org/GNOME/gjs/issues/196 gets fixed and released,
|
||||
# remove all conditional macros and enable systemtap.
|
||||
%bcond_with systemtap
|
||||
Name: gjs
|
||||
Version: 1.52.3
|
||||
Version: 1.54.0
|
||||
Release: 0
|
||||
Summary: JavaScript bindings based on gobject-introspection and Mozilla
|
||||
License: MIT
|
||||
License: MIT AND LGPL-2.0-or-later
|
||||
Group: Development/Libraries/GNOME
|
||||
URL: https://wiki.gnome.org/Projects/Gjs
|
||||
Source0: http://download.gnome.org/sources/gjs/1.52/%{name}-%{version}.tar.xz
|
||||
# PATCH-FIX-UPSTREAM gjs-Add-API-to-force-GC-schedule.patch -- context: Add API to force GC schedule
|
||||
Patch0: gjs-Add-API-to-force-GC-schedule.patch
|
||||
# PATCH-FIX-UPSTREAM gjs-Queue-forced-GC.patch -- object: Queue a forced GC when toggling down
|
||||
Patch1: gjs-Queue-forced-GC.patch
|
||||
# PATCH-FIX-UPSTREAM gjs-ensure-force_gc-flag-use.patch -- context: Ensure force_gc flag is not lost if the idle is scheduled
|
||||
Patch2: gjs-ensure-force_gc-flag-use.patch
|
||||
Source0: http://download.gnome.org/sources/gjs/1.54/%{name}-%{version}.tar.xz
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: mozjs52-devel
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: python
|
||||
BuildRequires: readline-devel
|
||||
@ -47,7 +44,7 @@ BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.53.4
|
||||
BuildRequires: pkgconfig(gthread-2.0) >= 2.50.0
|
||||
BuildRequires: pkgconfig(gtk+-3.0) >= 3.20
|
||||
BuildRequires: pkgconfig(libffi)
|
||||
#BuildRequires: pkgconfig(mozjs-52)
|
||||
BuildRequires: pkgconfig(mozjs-60)
|
||||
Requires: libgjs0 = %{version}
|
||||
ExcludeArch: s390
|
||||
|
||||
@ -57,6 +54,7 @@ Mozilla SpiderMonkey JavaScript engine.
|
||||
|
||||
%package -n libgjs0
|
||||
Summary: JavaScript bindings based on gobject-introspection and Mozilla
|
||||
License: LGPL-2.0-or-later
|
||||
Group: System/Libraries
|
||||
Provides: libgjs-0 = %{version}
|
||||
Obsoletes: libgjs-0 < %{version}
|
||||
@ -68,6 +66,7 @@ Mozilla SpiderMonkey JavaScript engine.
|
||||
%package -n typelib-1_0-GjsPrivate-1_0
|
||||
Summary: Introspection bindings for the GJS library
|
||||
# The tyeplib was renamed in gnome 3.6, to reflect it is a private lib.
|
||||
License: MIT AND LGPL-2.0-or-later
|
||||
Group: System/Libraries
|
||||
Obsoletes: typelib-1_0-GjsDBus-1_0 < %{version}
|
||||
|
||||
@ -77,6 +76,7 @@ Mozilla SpiderMonkey JavaScript engine.
|
||||
|
||||
%package -n libgjs-devel
|
||||
Summary: Development files for the GJS library
|
||||
License: MIT AND LGPL-2.0-or-later
|
||||
Group: Development/Libraries/GNOME
|
||||
Requires: %{name} = %{version}
|
||||
Requires: libgjs0 = %{version}
|
||||
@ -94,7 +94,7 @@ Mozilla SpiderMonkey JavaScript engine.
|
||||
%build
|
||||
%configure \
|
||||
--disable-static \
|
||||
--enable-systemtap
|
||||
--%{?with_systemtap:enable}%{!?with_systemtap:disable}-systemtap
|
||||
make %{?_smp_mflags}
|
||||
|
||||
%install
|
||||
@ -124,6 +124,8 @@ find %{buildroot} -type f -name "*.la" -delete -print
|
||||
%{_libdir}/*.so
|
||||
%{_libdir}/pkgconfig/*.pc
|
||||
%{_datadir}/%{name}-1.0/
|
||||
%if %{with systemtap}
|
||||
%{_datadir}/systemtap/tapset/*.stp
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
|
Loading…
Reference in New Issue
Block a user