Gnome-shell-system-monitor-applet: Crashing on Arch linux gnome-shell-3.34.1

Created on 24 Nov 2019  Â·  12Comments  Â·  Source: paradoxxxzero/gnome-shell-system-monitor-applet

Crash log:

Nov 24 16:04:45 i-5 gnome-shell[1705]: [System monitor] applet enabling
Nov 24 16:04:45 i-5 gnome-shell[1705]: JS ERROR: Extension [email protected]: Error: Tried to construct an object without a GType; are you using GObjec>
                                       SystemMonitor_TipItem@/home/strykar/.local/share/gnome-shell/extensions/[email protected]/extension.js:640:9
                                       tip_format@/home/strykar/.local/share/gnome-shell/extensions/[email protected]/extension.js:898:27
                                       SystemMonitor_Cpu@/home/strykar/.local/share/gnome-shell/extensions/[email protected]/extension.js:1196:9
                                       createCpus@/home/strykar/.local/share/gnome-shell/extensions/[email protected]/extension.js:1363:20
                                       enable@/home/strykar/.local/share/gnome-shell/extensions/[email protected]/extension.js:2316:26
                                       _callExtensionEnable@resource:///org/gnome/shell/ui/extensionSystem.js:131:13
                                       loadExtension@resource:///org/gnome/shell/ui/extensionSystem.js:263:21
                                       callback@resource:///org/gnome/shell/ui/extensionDownloader.js:232:17
                                       gotExtensionZipFile/<@resource:///org/gnome/shell/ui/extensionDownloader.js:99:13
Nov 24 16:04:45 i-5 gnome-software[1959]: State change on user/*/*/shell-extension/system-monitor_paradoxxx.zero.gmail.com/* from available to installed is not OK
Nov 24 16:04:45 i-5 gnome-software[1959]: system-monitor_paradoxxx.zero.gmail.com has error: Error: Tried to construct an object without a GType; are you using GObject.regis>
Nov 24 16:04:45 i-5 gnome-software[1959]: system-monitor_paradoxxx.zero.gmail.com has error: Error: Tried to construct an object without a GType; are you using GObject.regis>
Nov 24 16:04:47 i-5 gnome-shell[1705]: JS ERROR: TypeError: this.tip_labels[i] is undefined
                                       update@/home/strykar/.local/share/gnome-shell/extensions/[email protected]/extension.js:925:39
Nov 24 16:05:11 i-5 gnome-shell[1705]: Object .Gjs_WindowSwitcherPopup (0x55e302849870), has been already deallocated — impossible to access it. This might be caused by the >
Nov 24 16:05:11 i-5 gnome-shell[1705]: == Stack trace for context 0x55e2ffd7a360 ==
Nov 24 16:05:11 i-5 gnome-shell[1705]: #0   55e302a82820 i   resource:///org/gnome/shell/ui/windowManager.js:2094 (7fc0fbc3baf0 @ 410)
Nov 24 16:05:11 i-5 gnome-shell[1705]: #1   7fff381c5060 b   self-hosted:981 (7fc0fbb380d0 @ 474)
Nov 24 16:05:11 i-5 gnome-shell[1705]: clutter_actor_destroy: assertion 'CLUTTER_IS_ACTOR (self)' failed

See https://gitlab.gnome.org/World/ShellExtensions/desktop-icons/merge_requests/151
I'm happy to help troubleshoot or provide more information, this is likely due to sweeping non-backward-compatible changes to Gnome in3.34.

Most helpful comment

Hi, I have made an emergency GJS 1.58.3 release, that should make things work again for the moment. Sorry about this; I didn't realize there was any possibility that the condition being checked for could have worked at all! I thought we were just replacing a cryptic error message with a clear one.

That said, the breaking change happened in GNOME Shell 3.34.0, the GNOME Shell developers changed some classes to inherit from GObject for performance reasons, and unfortunately that means we have to use GObject.registerClass() on subclasses of those classes, or things will break in subtle ways, for example because parent methods aren't overridden correctly, or when connecting to signals. So we are going to put back the check starting in GNOME 3.36, and I am considering re-adding it as a warning (instead of an exception) in GJS 1.58.4 next month.

Therefore I would recommend fixing the code even for GNOME 3.34, to avoid subtle breakage that your extension might be suffering from even right now. It should be fairly straightforward to fix, for example in the particular class declaration that failed the check:

-const TipItem = class SystemMonitor_TipItem extends PopupMenu.PopupBaseMenuItem {
-    constructor() {
-        super();
-        // PopupMenu.PopupBaseMenuItem.prototype._init.call(this);
+const TipItem = GObject.registerClass(
+class SystemMonitor_TipItem extends PopupMenu.PopupBaseMenuItem {
+    _init() {
+        super._init();
         this.actor.remove_style_class_name('popup-menu-item');
         this.actor.add_style_class_name('sm-tooltip-item');
     }
-}
+});

(and import const GObject = imports.gi.GObject at the top of the file)

All 12 comments

Same here... I just updated the last updated and crashes.

You can workaround it if you downgrade gjs 1.58.2 to 1.58.1.

You can workaround it if you downgrade gjs 1.58.2 to 1.58.1.

Thanks! works for me, and for now.

You can workaround it if you downgrade gjs 1.58.2 to 1.58.1.

Thanks! works for me, and for now.

I don't know what the reason of this issue:
The extension developers should add support of gjs 1.58.2?
Or the real reason of the issue is a regression in the new version of gjs 1.58.2?

Not sure if gjs follows semver, but typically you would not expect an increment of the third part of a version number to be an intentionally breaking change. I don't think gnome-shell extensions are expected to keep up with changes in between major releases of gnome-shell.

Reported a bug to gjs, which links to the commit in gjs that introduces the exception we're seeing.

@chrisjbillington keeping up with gnome shell breaking changes is actually the greatest struggle for all extension maintainers. No backwards compatibility expectations allowed.

@chrisjbillington keeping up with gnome shell breaking changes is actually the greatest struggle for all extension maintainers. No backwards compatibility expectations allowed.

True but it's not supposed to be the case intra-release.

Issue is being addressed in gjs:

https://gitlab.gnome.org/GNOME/gjs/issues/288

They will make an emergency release that should resolve the problem in gnome-shell 3.34.

Watch the gjs bug report to see whether action will need to be taken for the gnome 3.36 release.

Hi, I have made an emergency GJS 1.58.3 release, that should make things work again for the moment. Sorry about this; I didn't realize there was any possibility that the condition being checked for could have worked at all! I thought we were just replacing a cryptic error message with a clear one.

That said, the breaking change happened in GNOME Shell 3.34.0, the GNOME Shell developers changed some classes to inherit from GObject for performance reasons, and unfortunately that means we have to use GObject.registerClass() on subclasses of those classes, or things will break in subtle ways, for example because parent methods aren't overridden correctly, or when connecting to signals. So we are going to put back the check starting in GNOME 3.36, and I am considering re-adding it as a warning (instead of an exception) in GJS 1.58.4 next month.

Therefore I would recommend fixing the code even for GNOME 3.34, to avoid subtle breakage that your extension might be suffering from even right now. It should be fairly straightforward to fix, for example in the particular class declaration that failed the check:

-const TipItem = class SystemMonitor_TipItem extends PopupMenu.PopupBaseMenuItem {
-    constructor() {
-        super();
-        // PopupMenu.PopupBaseMenuItem.prototype._init.call(this);
+const TipItem = GObject.registerClass(
+class SystemMonitor_TipItem extends PopupMenu.PopupBaseMenuItem {
+    _init() {
+        super._init();
         this.actor.remove_style_class_name('popup-menu-item');
         this.actor.add_style_class_name('sm-tooltip-item');
     }
-}
+});

(and import const GObject = imports.gi.GObject at the top of the file)

Fixed in 1.58.3-1! Thanks @ptomato @chrisjbillington
@paradoxxxzero Your thoughts on Philip's notes about the changes required to get this working in future versions?

Fixed in 1.58.3-1! Thanks @ptomato @chrisjbillington
@paradoxxxzero Your thoughts on Philip's notes about the changes required to get this working in future versions?

And thanks @Kerrung who told you that the reason is in a gjs regression.

And thanks @Kerrung who told you that the reason is in a gjs regression.

My mistake indeed, thank you! @Kerrung

Was this page helpful?
0 / 5 - 0 ratings

Related issues

bendavis78 picture bendavis78  Â·  13Comments

RafaelQuirino picture RafaelQuirino  Â·  6Comments

loxon-lab picture loxon-lab  Â·  7Comments

Jerther picture Jerther  Â·  10Comments

vladimirnewissue picture vladimirnewissue  Â·  16Comments