element-hq / element-desktop

A glossy Matrix collaboration client for desktop.
https://element.io
GNU Affero General Public License v3.0
1.14k stars 260 forks source link

Render process of Electron has crashed #1401

Open paboum opened 9 months ago

paboum commented 9 months ago

Steps to reproduce

  1. Run element-desktop from terminal.
  2. Browse some large room's history a few hours back. Multiple pictures and videos are there.

Outcome

What did you expect?

See the room's history. It works in other rooms. I have plenty of RAM and my ulimits are reasonable:

real-time non-blocking time  (microseconds, -R) unlimited
core file size              (blocks, -c) 0
data seg size               (kbytes, -d) unlimited
scheduling priority                 (-e) 0
file size                   (blocks, -f) unlimited
pending signals                     (-i) 514341
max locked memory           (kbytes, -l) 8192
max memory size             (kbytes, -m) unlimited
open files                          (-n) 1024
pipe size                (512 bytes, -p) 8
POSIX message queues         (bytes, -q) 819200
real-time priority                  (-r) 0
stack size                  (kbytes, -s) 8192
cpu time                   (seconds, -t) unlimited
max user processes                  (-u) 514341
virtual memory              (kbytes, -v) unlimited
file locks                          (-x) unlimited

What happened instead?

The app's screen goes entirely white. This means the render process of Electron has crashed. I have to Ctrl+Q quit it and restart. Can't seem to find any relevant log files/crash dumps in .config/Element.

On terminal I get:

<--- Last few GCs --->

[1:0x29b4450ac000]     2542 ms: Scavenge 344.9 (360.8) -> 344.1 (368.1) MB, 8.71 / 0.00 ms  (average mu = 0.920, current mu = 0.920) allocation failure; 
[1:0x29b4450ac000]     2556 ms: Scavenge 351.9 (368.1) -> 352.6 (368.8) MB, 8.82 / 0.00 ms  (average mu = 0.920, current mu = 0.920) allocation failure; 
[1:0x29b4450ac000]     2565 ms: Scavenge 352.6 (368.8) -> 351.9 (376.1) MB, 8.96 / 0.00 ms  (average mu = 0.920, current mu = 0.920) allocation failure; 

<--- JS stacktrace --->

[16346:1230/211441.312578:ERROR:v8_initializer.cc(752)] V8 javascript OOM (Scavenger: semi-space copy).
Error sending from webFrameMain:  Error: Render frame was disposed before WebFrameMain could be accessed
    at WebFrameMain.send (node:electron/js2c/browser_init:2:93682)
    at WebContents.send (node:electron/js2c/browser_init:2:79161)
    at App.beforeQuit (/opt/Element/resources/app.asar/lib/electron-main.js:551:82)
    at App.emit (node:events:514:28)
    at App.emit (node:domain:489:12)
    at appMethod (node:electron/js2c/browser_init:2:24952)
    at Object.execute (node:electron/js2c/browser_init:2:29044)
    at MenuItem.click (node:electron/js2c/browser_init:2:30873)
    at Menu._executeCommand (node:electron/js2c/browser_init:2:36315)

In my dmesg I get:

[219937.314561] traps: DedicatedWorker[16641] trap int3 ip:55d2ad0e545f sp:7fc6b6972c80 error:0 in element-desktop[55d2acaf2000+7e36000]

I can't seem to find a core dump, which suggests the main process hasn't crashed (maybe it could restart itself?). Also running with gdb results in process exited normally.

Operating system

Linux

Application version

Element version: 1.11.52 Crypto version: Olm 3.2.15

How did you install the app?

from my OS repo

Homeserver

not relevant

Will you send logs?

No

t3chguy commented 9 months ago

Operating system Linux

How did you install the app? from my OS repo

Please provide more detail, Linux is not a single OS nor a version.

paboum commented 9 months ago

Ah, you want to know how the package was installed so that you could know all the dependencies are met. Okay, here's ebuild:

EAPI=8

inherit optfeature unpacker xdg

MY_PN="${PN/-bin}"

DESCRIPTION="A glossy Matrix collaboration client for desktop (binary package)"
HOMEPAGE="https://element.io"
SRC_URI="https://packages.element.io/debian/pool/main/e/element-desktop/${MY_PN}_${PV}_amd64.deb"
S="${WORKDIR}"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="amd64"
RESTRICT="splitdebug"

RDEPEND="
    >=app-accessibility/at-spi2-core-2.46.0:2
    app-crypt/libsecret
    dev-db/sqlcipher
    dev-libs/expat
    dev-libs/glib:2
    dev-libs/nettle
    dev-libs/nspr
    dev-libs/nss
    media-libs/alsa-lib
    media-libs/mesa
    net-print/cups
    sys-apps/dbus
    x11-libs/cairo
    x11-libs/gdk-pixbuf:2
    x11-libs/gtk+:3
    x11-libs/libX11
    x11-libs/libXcomposite
    x11-libs/libXdamage
    x11-libs/libXext
    x11-libs/libXfixes
    x11-libs/libXrandr
    x11-libs/libdrm
    x11-libs/libxcb
    x11-libs/libxkbcommon
    x11-libs/pango"

QA_PREBUILT="opt/Element/chrome-sandbox
    opt/Element/chrome_crashpad_handler
    opt/Element/element-desktop
    opt/Element/libEGL.so
    opt/Element/libGLESv2.so
    opt/Element/libffmpeg.so
    opt/Element/libvk_swiftshader.so
    opt/Element/libvulkan.so.1
    opt/Element/resources/app.asar.unpacked/node_modules/matrix-seshat/index.node
    opt/Element/resources/app.asar.unpacked/node_modules/keytar/build/Release/keytar.node"

src_prepare() {
    default
    rm opt/Element/{LICENSE.electron.txt,LICENSES.chromium.html} || die
}

src_install() {
    mv usr/share/doc/${MY_PN} usr/share/doc/${PF} || die
    gunzip usr/share/doc/${PF}/changelog.gz || die

    insinto /
    doins -r usr
    doins -r opt
    local f
    for f in ${QA_PREBUILT}; do
        fperms +x "/${f}"
    done
    fperms u+s /opt/Element/chrome-sandbox

    dosym ../../opt/Element/${MY_PN} /usr/bin/${MY_PN}
    dosym ${MY_PN} /usr/bin/riot-desktop
}

pkg_postinst() {
    xdg_pkg_postinst
    optfeature "emojis" media-fonts/noto-emoji
}

If your interested in specific library versions etc. I can provide those as well.

t3chguy commented 9 months ago

Repacking a deb isn't really supported, why not just use the tarball builds?

If your interested in specific library versions etc. I can provide those as well.

Yes, the dependency versions are key too:

Depends: libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils, libatspi2.0-0, libuuid1, libsecret-1-0, libasound2, libgbm1
Recommends: libsqlcipher0, element-io-archive-keyring
paboum commented 9 months ago

Repacking a deb isn't really supported, why not just use the tarball builds?

Good question. I'll find Stefan Strogin and ask him that.

Depends: libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils, libatspi2.0-0, libuuid1, libsecret-1-0, libasound2, libgbm1
Recommends: libsqlcipher0, element-io-archive-keyring

The following lib list is in the same order as you listed them (different package names occur):

x11-libs/gtk+:3 3.24.38
x11-libs/libnotify 0.8.2
dev-libs/nss 3.96.1
x11-libs/libXScrnSaver 1.2.4
x11-libs/libXtst 1.2.4
x11-misc/xdg-utils 1.1.3_p20210805-r1
app-accessibility/at-spi2-core 2.48.3
sys-apps/util-linux 2.38.1-r3
app-crypt/libsecret 0.20.5-r3
media-libs/alsa-lib 1.2.10-r2
media-libs/mesa 23.1.9
dev-db/sqlcipher 4.5.1

Since this is a rolling Linux distribution, any version requirements need to be inserted into ebuild, I could relay that if needed.

t3chguy commented 9 months ago

The version of sqlcipher is unexpected. Should be 3.4.x like debian/ubuntu repos have https://packages.ubuntu.com/focal/libs/libsqlcipher0