oae / gnome-shell-pano

Next-gen Clipboard Manager for Gnome Shell
https://extensions.gnome.org/extension/5278/pano/
GNU General Public License v2.0
990 stars 53 forks source link

GNOME Session Crashes when quickly clicking the magnifier icon #169

Open Libric0 opened 1 year ago

Libric0 commented 1 year ago

Description

What is the bug?

Problem Explanation

Expected Behavior

Reprodution

Steps To Reproduce

  1. Press SHIFT+META+V to open Pano
  2. Quickly and repeatedly press the magnifying glass icon

Details

Mark with [ ] all that applies:

It happens with any application?

It happens only on one computer?

It happens only with some specific gnome configuration?

It happens only with some specific extension installed?

Diagnostics

Under what conditions does it happen?

Fill in all information that applies:

Environment

Output and Logs

Gnome

Command: journalctl --since=now --follow /usr/bin/gnome-shell

$ journalctl --since=now --follow /usr/bin/gnome-shell
...

Pano Configuration

Command: dconf dump /org/gnome/shell/extensions/pano/

$ dconf dump /org/gnome/shell/extensions/pano/
...

play-audio-on-copy=false send-notification-on-copy=false

Enabled Extensions

Command: dconf read /org/gnome/shell/enabled-extensions | tr ' ' '\n'

$ dconf read /org/gnome/shell/enabled-extensions | tr ' ' '\n'
...

['drive-menu@gnome-shell-extensions.gcampax.github.com', 'sound-output-device-chooser@kgshank.net', 'pano@elhan.io']

Libric0 commented 1 year ago

I dont know how to fill the other tasks, i think i did everything applicable

oae commented 1 year ago

I can not reproduce this problem. See if you can find any related logs with journalctl --since=-3h /usr/bin/gnome-shell

Libric0 commented 1 year ago

I timed it exactly, because many messages appeared. Nothing within minutes before crashing, so I won't include it. Everything afterwards is just regular gnome startup (I included the first 2 lines of it)

clutter_action_get_phase: assertion 'CLUTTER_IS_ACTION (action)' failed
ANOM_ABEND auid=1000 uid=1000 gid=1000 ses=23 subj=kernel pid=39123 comm="gnome-shell" exe="/usr/bin/gnome-shell" sig=11 res=1
Running GNOME Shell (using mutter 43.3) as a Wayland display server

I hope this helps. I looked at the search bar code and it uses clutter, so maybe thats actually where the problem is.

Okay I tried fixing it myself to no avail. Have you tried really frantically clicking the icon for many times? It can take 10 seconds sometimes, but it always works after a while.

What I already attempted was adding a timeout for toggling the itemtype (without the timeout, the itemtype is toggled more often than expected ,especially when using tab. I could open another issue if you want. 100ms suffice). But it didnt work for this issue.

Tinkering with the focus also had no effect. My best explanation is that clicking and thereby changing a primary icon of an entry is just broken in my version of gnome and always crashes after a while. Would be cool if you could double check ^^

Arcitec commented 1 year ago

I don't know what's up with this either. I am getting a similar Clutter crash in a Fedora Silverblue 38 virtual machine, but not on the host. Both are running GNOME Shell 44.1. Host and VM both use X11.

Video of how to trigger the crash (happens 100% of the time when I click "X" on the final item):

https://www.youtube.com/watch?v=ZiwFMBBJk2A

Shell log (same error message for every crash):

May 22 03:45:47 fedora systemd[1]: Started systemd-coredump@4-3981-0.service - Process Core Dump (PID 3981/UID 0).
May 22 03:45:47 fedora gnome-shell[3606]: #3   5559858784a8 i   /usr/share/gnome-shell/extensions/pano@elhan.io/extension.js:1066 (1c0e78febba0 @ 18)
May 22 03:45:47 fedora gnome-shell[3606]: #2   555985878530 i   /usr/share/gnome-shell/extensions/pano@elhan.io/extension.js:1163 (1c0e78febf10 @ 44)
May 22 03:45:47 fedora gnome-shell[3606]: #1   5559858785d0 i   /usr/share/gnome-shell/extensions/pano@elhan.io/extension.js:2370 (1c0e78fed4c0 @ 95)
May 22 03:45:47 fedora gnome-shell[3606]: #0   555985878668 i   /usr/share/gnome-shell/extensions/pano@elhan.io/extension.js:2381 (1c0e78fed510 @ 16)
May 22 03:45:47 fedora gnome-shell[3606]: == Stack trace for context 0x55597cbbc660 ==
May 22 03:45:47 fedora gnome-shell[3606]: Bail out! Clutter:ERROR:../clutter/clutter/clutter-stage.c:4672:cancel_implicit_grab_on_actor: assertion failed: (CLUTTER_ACTOR_IS_MAPPED (parent))
May 22 03:45:47 fedora gnome-shell[3606]: Clutter:ERROR:../clutter/clutter/clutter-stage.c:4672:cancel_implicit_grab_on_actor: assertion failed: (CLUTTER_ACTOR_IS_MAPPED (parent))
May 22 03:45:47 fedora gnome-shell[3606]: **
May 22 03:44:57 fedora gnome-shell[3606]: [pano] [extension] extension is enabled

Note how it gives line numbers of the errors, so I grabbed some context for all of those line numbers:

// line 1066
            const removeButton = new st1.Button({
                style_class: 'pano-item-remove-button',
                child: removeIcon,
            });
            removeButton.connect('clicked', () => {
                this.emit('on-remove'); // line 1066
                return clutter10.EVENT_PROPAGATE;
            });
            actionContainer.add_child(this.favoriteButton);
            actionContainer.add_child(removeButton);
            this.add_child(iconContainer);

// line 1163
            this.header = new PanoItemHeader(PanoItemTypes[dbItem.itemType], dbItem.copyDate);
            this.header.setFavorite(this.dbItem.isFavorite);
            this.header.connect('on-remove', () => {
                this.emit('on-remove', JSON.stringify(this.dbItem)); // line 1163
                return clutter10.EVENT_PROPAGATE;
            });
            this.header.connect('on-favorite', () => {
                this.dbItem = { ...this.dbItem, isFavorite: !this.dbItem.isFavorite };
                this.emit('on-favorite', JSON.stringify(this.dbItem));
                return clutter10.EVENT_PROPAGATE;
            });

// line 2370
        connectOnRemove(panoItem) {
            panoItem.connect('on-remove', () => {
                if (this.currentFocus === panoItem) {
                    this.focusNext() || this.focusPrev();
                }
                this.removeItem(panoItem); // line 2370
                this.filter(this.currentFilter, this.currentItemTypeFilter, this.showFavorites);
                if (this.getVisibleItems().length === 0) {
                    this.emit('scroll-focus-out');
                }
                else {
                    this.focusOnClosest();
                }
            });
        }

// line 2381
                else {
                    this.focusOnClosest();
                }
            });
        }
        removeItem(item) {
            item.hide(); // line 2381
            this.list.remove_child(item);
        }
        getItem(panoItem) {
            return this.getItems().find((item) => item.dbItem.id === panoItem.dbItem.id);
        }

I have no idea why it works on the host but not in my virtual machine.