romgrk / node-gtk

GTK+ bindings for NodeJS (via GObject introspection)
MIT License
493 stars 41 forks source link

`activate` vfunc in `Gtk.Application` results in segfault #362

Open pervoj opened 4 months ago

pervoj commented 4 months ago

Using the activate signal in Gtk.Application works fine, but switching to the activate vfunc results in segfault:

Screenshot from 2024-04-27 20-58-50

Core dump:

           PID: 48034 (node)
           UID: 1000 (pervoj)
           GID: 1000 (pervoj)
        Signal: 11 (SEGV)
     Timestamp: Sat 2024-04-27 21:03:55 CEST (4min 51s ago)
  Command Line: node .
    Executable: /var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node
 Control Group: /user.slice/user-1000.slice/user@1000.service/app.slice/app-gnome-codium-43495.scope
          Unit: user@1000.service
     User Unit: app-gnome-codium-43495.scope
         Slice: user-1000.slice
     Owner UID: 1000 (pervoj)
       Boot ID: cd0e8b4925304c078e15ea8d37166d23
    Machine ID: f54b3cee66d14309828dbbdd47de34bf
      Hostname: envy
       Storage: /var/lib/systemd/coredump/core.node.1000.cd0e8b4925304c078e15ea8d37166d23.48034.1714244635000000.zst (present)
  Size on Disk: 10.3M
       Message: Process 48034 (node) of user 1000 dumped core.

                Module libgvfsdbus.so from rpm gvfs-1.54.0-2.fc40.x86_64
                Module libgvfscommon.so from rpm gvfs-1.54.0-2.fc40.x86_64
                Module libgioremote-volume-monitor.so from rpm gvfs-1.54.0-2.fc40.x86_64
                Module libduktape.so.207 from rpm duktape-2.7.0-7.fc40.x86_64
                Module libpxbackend-1.0.so from rpm libproxy-0.5.5-1.fc40.x86_64
                Module libproxy.so.1 from rpm libproxy-0.5.5-1.fc40.x86_64
                Module libdconfsettings.so from rpm dconf-0.40.0-12.fc40.x86_64
                Module libpciaccess.so.0 from rpm libpciaccess-0.16-12.fc40.x86_64
                Module libdrm_intel.so.1 from rpm libdrm-2.4.120-3.fc40.x86_64
                Module libdrm_nouveau.so.2 from rpm libdrm-2.4.120-3.fc40.x86_64
                Module libdrm_amdgpu.so.1 from rpm libdrm-2.4.120-3.fc40.x86_64
                Module libdrm_radeon.so.1 from rpm libdrm-2.4.120-3.fc40.x86_64
                Module libsensors.so.4 from rpm lm_sensors-3.6.0-18.fc40.x86_64
                Module iris_dri.so from rpm mesa-24.0.5-1.fc40.x86_64
                Module libXxf86vm.so.1 from rpm libXxf86vm-1.1.5-6.fc40.x86_64
                Module libxcb-glx.so.0 from rpm libxcb-1.16-4.fc40.x86_64
                Module libGLX_mesa.so.0 from rpm mesa-24.0.5-1.fc40.x86_64
                Module libGL.so.1 from rpm libglvnd-1.7.0-4.fc40.x86_64
                Module libtinfo.so.6 from rpm ncurses-6.4-12.20240127.fc40.x86_64
                Module libedit.so.0 from rpm libedit-3.1-50.20230828cvs.fc40.x86_64
                Module libxshmfence.so.1 from rpm libxshmfence-1.3.2-3.fc40.x86_64
                Module libxcb-sync.so.1 from rpm libxcb-1.16-4.fc40.x86_64
                Module libxcb-present.so.0 from rpm libxcb-1.16-4.fc40.x86_64
                Module libxcb-dri3.so.0 from rpm libxcb-1.16-4.fc40.x86_64
                Module libxcb-xfixes.so.0 from rpm libxcb-1.16-4.fc40.x86_64
                Module libxcb-dri2.so.0 from rpm libxcb-1.16-4.fc40.x86_64
                Module libglapi.so.0 from rpm mesa-24.0.5-1.fc40.x86_64
                Module libEGL_mesa.so.0 from rpm mesa-24.0.5-1.fc40.x86_64
                Module libgstaudio-1.0.so.0 from rpm gstreamer1-plugins-base-1.22.9-1.fc40.x86_64
                Module libxcb-randr.so.0 from rpm libxcb-1.16-4.fc40.x86_64
                Module libexpat.so.1 from rpm expat-2.6.2-1.fc40.x86_64
                Module libwayland-server.so.0 from rpm wayland-1.22.0-3.fc40.x86_64
                Module libGLdispatch.so.0 from rpm libglvnd-1.7.0-4.fc40.x86_64
                Module libelf.so.1 from rpm elfutils-0.191-4.fc40.x86_64
                Module libgstpbutils-1.0.so.0 from rpm gstreamer1-plugins-base-1.22.9-1.fc40.x86_64
                Module libgsttag-1.0.so.0 from rpm gstreamer1-plugins-base-1.22.9-1.fc40.x86_64
                Module libgbm.so.1 from rpm mesa-24.0.5-1.fc40.x86_64
                Module libdrm.so.2 from rpm libdrm-2.4.120-3.fc40.x86_64
                Module libgudev-1.0.so.0 from rpm libgudev-238-5.fc40.x86_64
                Module libX11-xcb.so.1 from rpm libX11-1.8.9-1.fc40.x86_64
                Module libwayland-cursor.so.0 from rpm wayland-1.22.0-3.fc40.x86_64
                Module libGLX.so.0 from rpm libglvnd-1.7.0-4.fc40.x86_64
                Module libEGL.so.1 from rpm libglvnd-1.7.0-4.fc40.x86_64
                Module libgstallocators-1.0.so.0 from rpm gstreamer1-plugins-base-1.22.9-1.fc40.x86_64
                Module libdw.so.1 from rpm elfutils-0.191-4.fc40.x86_64
                Module libunwind.so.8 from rpm libunwind-1.8.0-3.fc40.x86_64
                Module liborc-0.4.so.0 from rpm orc-0.4.38-2.fc40.x86_64
                Module libgstbase-1.0.so.0 from rpm gstreamer1-1.22.9-1.fc40.x86_64
                Module libgstplay-1.0.so.0 from rpm gstreamer1-plugins-bad-free-1.22.9-3.fc40.x86_64
                Module libgstgl-1.0.so.0 from rpm gstreamer1-plugins-base-1.22.9-1.fc40.x86_64
                Module libgstreamer-1.0.so.0 from rpm gstreamer1-1.22.9-1.fc40.x86_64
                Module libgstvideo-1.0.so.0 from rpm gstreamer1-plugins-base-1.22.9-1.fc40.x86_64
                Module libgstplayer-1.0.so.0 from rpm gstreamer1-plugins-bad-free-1.22.9-3.fc40.x86_64
                Module libmedia-gstreamer.so from rpm gtk4-4.14.3-1.fc40.x86_64
                Module libibus-1.0.so.5 from rpm ibus-1.5.30~rc3-1.fc40.x86_64
                Module libim-ibus.so from rpm ibus-1.5.30~rc3-1.fc40.x86_64
                Module libprintbackend-file.so from rpm gtk4-4.14.3-1.fc40.x86_64
                Module libgmp.so.10 from rpm gmp-6.2.1-8.fc40.x86_64
                Module libhogweed.so.6 from rpm nettle-3.9.1-6.fc40.x86_64
                Module libnettle.so.8 from rpm nettle-3.9.1-6.fc40.x86_64
                Module libtasn1.so.6 from rpm libtasn1-4.19.0-6.fc40.x86_64
                Module libp11-kit.so.0 from rpm p11-kit-0.25.3-4.fc40.x86_64
                Module libdbus-1.so.3 from rpm dbus-1.14.10-3.fc40.x86_64
                Module libudev.so.1 from rpm systemd-255.4-1.fc40.x86_64
                Module liblcms2.so.2 from rpm lcms2-2.16-3.fc40.x86_64
                Module libgnutls.so.30 from rpm gnutls-3.8.5-1.fc40.x86_64
                Module libavahi-client.so.3 from rpm avahi-0.8-26.fc40.x86_64
                Module libavahi-common.so.3 from rpm avahi-0.8-26.fc40.x86_64
                Module libcolord.so.2 from rpm colord-1.4.7-3.fc40.x86_64
                Module libcups.so.2 from rpm cups-2.4.7-13.fc40.x86_64
                Module libprintbackend-cups.so from rpm gtk4-4.14.3-1.fc40.x86_64
                Module libkeyutils.so.1 from rpm keyutils-1.6.3-3.fc40.x86_64
                Module libkrb5support.so.0 from rpm krb5-1.21.2-5.fc40.x86_64
                Module libcom_err.so.2 from rpm e2fsprogs-1.47.0-5.fc40.x86_64
                Module libk5crypto.so.3 from rpm krb5-1.21.2-5.fc40.x86_64
                Module libkrb5.so.3 from rpm krb5-1.21.2-5.fc40.x86_64
                Module libunistring.so.5 from rpm libunistring-1.1-7.fc40.x86_64
                Module liblz4.so.1 from rpm lz4-1.9.4-6.fc40.x86_64
                Module libcap.so.2 from rpm libcap-2.69-8.fc40.x86_64
                Module libgssapi_krb5.so.2 from rpm krb5-1.21.2-5.fc40.x86_64
                Module libcrypto.so.3 from rpm openssl-3.2.1-2.fc40.x86_64
                Module libssl.so.3 from rpm openssl-3.2.1-2.fc40.x86_64
                Module libidn2.so.0 from rpm libidn2-2.3.7-1.fc40.x86_64
                Module libnghttp2.so.14 from rpm nghttp2-1.59.0-3.fc40.x86_64
                Module libstemmer.so.0 from rpm snowball-2.2.0-10.fc40.x86_64
                Module libsystemd.so.0 from rpm systemd-255.4-1.fc40.x86_64
                Module libyaml-0.so.2 from rpm libyaml-0.2.5-14.fc40.x86_64
                Module libxmlb.so.2 from rpm libxmlb-0.3.19-1.fc40.x86_64
                Module libcurl.so.4 from rpm curl-8.6.0-8.fc40.x86_64
                Module libappstream.so.5 from rpm appstream-1.0.2-2.fc40.x86_64
                Module libadwaita-1.so.0 from rpm libadwaita-1.5.0-1.fc40.x86_64
                Module libsharpyuv.so.0 from rpm libwebp-1.3.2-5.fc40.x86_64
                Module libjbig.so.2.1 from rpm jbigkit-2.1-29.fc40.x86_64
                Module libLerc.so.4 from rpm liblerc-4.0.0-6.fc40.x86_64
                Module libzstd.so.1 from rpm zstd-1.5.6-1.fc40.x86_64
                Module libwebp.so.7 from rpm libwebp-1.3.2-5.fc40.x86_64
                Module libjson-glib-1.0.so.0 from rpm json-glib-1.8.0-3.fc40.x86_64
                Module libcairo-script-interpreter.so.2 from rpm cairo-1.18.0-3.fc40.x86_64
                Module libXinerama.so.1 from rpm libXinerama-1.1.5-6.fc40.x86_64
                Module libXrandr.so.2 from rpm libXrandr-1.5.4-3.fc40.x86_64
                Module libXfixes.so.3 from rpm libXfixes-6.0.1-3.fc40.x86_64
                Module libXdamage.so.1 from rpm libXdamage-1.1.6-3.fc40.x86_64
                Module libXcursor.so.1 from rpm libXcursor-1.2.1-7.fc40.x86_64
                Module libwayland-egl.so.1 from rpm wayland-1.22.0-3.fc40.x86_64
                Module libwayland-client.so.0 from rpm wayland-1.22.0-3.fc40.x86_64
                Module libxkbcommon.so.0 from rpm libxkbcommon-1.6.0-2.fc40.x86_64
                Module libtiff.so.6 from rpm libtiff-4.6.0-2.fc40.x86_64
                Module libvulkan.so.1 from rpm vulkan-loader-1.3.280.0-1.fc40.x86_64
                Module libtracker-sparql-3.0.so.0 from rpm tracker-3.7.1-1.fc40.x86_64
                Module libpangoft2-1.0.so.0 from rpm pango-1.52.2-1.fc40.x86_64
                Module libXi.so.6 from rpm libXi-1.8.1-5.fc40.x86_64
                Module libepoxy.so.0 from rpm libepoxy-1.5.10-6.fc40.x86_64
                Module libpangocairo-1.0.so.0 from rpm pango-1.52.2-1.fc40.x86_64
                Module libgtk-4.so.1 from rpm gtk4-4.14.3-1.fc40.x86_64
                Module libgraphene-1.0.so.0 from rpm graphene-1.10.6-8.fc40.x86_64
                Module libjpeg.so.62 from rpm libjpeg-turbo-3.0.2-1.fc40.x86_64
                Module libgdk_pixbuf-2.0.so.0 from rpm gdk-pixbuf2-2.42.10-8.fc40.x86_64
                Module libdatrie.so.1 from rpm libdatrie-0.2.13-9.fc40.x86_64
                Module libthai.so.0 from rpm libthai-0.1.29-8.fc40.x86_64
                Module libfribidi.so.0 from rpm fribidi-1.0.13-4.fc40.x86_64
                Module libpango-1.0.so.0 from rpm pango-1.52.2-1.fc40.x86_64
                Module libcairo-gobject.so.2 from rpm cairo-1.18.0-3.fc40.x86_64
                Module libharfbuzz-gobject.so.0 from rpm harfbuzz-8.3.0-5.fc40.x86_64
                Module libblkid.so.1 from rpm util-linux-2.40-13.fc40.x86_64
                Module libselinux.so.1 from rpm libselinux-3.6-4.fc40.x86_64
                Module libmount.so.1 from rpm util-linux-2.40-13.fc40.x86_64
                Module libgio-2.0.so.0 from rpm glib2-2.80.0-1.fc40.x86_64
                Module libbrotlicommon.so.1 from rpm brotli-1.1.0-3.fc40.x86_64
                Module libgraphite2.so.3 from rpm graphite2-1.3.14-15.fc40.x86_64
                Module liblzma.so.5 from rpm xz-5.4.6-3.fc40.x86_64
                Module libXau.so.6 from rpm libXau-1.0.11-6.fc40.x86_64
                Module libbrotlidec.so.1 from rpm brotli-1.1.0-3.fc40.x86_64
                Module libharfbuzz.so.0 from rpm harfbuzz-8.3.0-5.fc40.x86_64
                Module libbz2.so.1 from rpm bzip2-1.0.8-18.fc40.x86_64
                Module libxml2.so.2 from rpm libxml2-2.12.6-1.fc40.x86_64
                Module libpcre2-8.so.0 from rpm pcre2-10.42-2.fc40.2.x86_64
                Module libpixman-1.so.0 from rpm pixman-0.43.0-3.fc40.x86_64
                Module libxcb-shm.so.0 from rpm libxcb-1.16-4.fc40.x86_64
                Module libxcb-render.so.0 from rpm libxcb-1.16-4.fc40.x86_64
                Module libxcb.so.1 from rpm libxcb-1.16-4.fc40.x86_64
                Module libXrender.so.1 from rpm libXrender-0.9.11-6.fc40.x86_64
                Module libXext.so.6 from rpm libXext-1.3.6-1.fc40.x86_64
                Module libX11.so.6 from rpm libX11-1.8.9-1.fc40.x86_64
                Module libfreetype.so.6 from rpm freetype-2.13.2-5.fc40.x86_64
                Module libfontconfig.so.1 from rpm fontconfig-2.15.0-4.fc40.x86_64
                Module libpng16.so.16 from rpm libpng-1.6.40-3.fc40.x86_64
                Module libz.so.1 from rpm zlib-ng-2.1.6-2.fc40.x86_64
                Module libffi.so.8 from rpm libffi-3.4.4-7.fc40.x86_64
                Module libgmodule-2.0.so.0 from rpm glib2-2.80.0-1.fc40.x86_64
                Module libglib-2.0.so.0 from rpm glib2-2.80.0-1.fc40.x86_64
                Module libgobject-2.0.so.0 from rpm glib2-2.80.0-1.fc40.x86_64
                Module libcairo.so.2 from rpm cairo-1.18.0-3.fc40.x86_64
                Module libgirepository-1.0.so.1 from rpm gobject-introspection-1.80.1-1.fc40.x86_64
                Stack trace of thread 48034:
                #0  0x00007fd166002010 n/a (n/a + 0x0)
                #1  0x00007fd16748bf11 g_signal_emit_valist (libgobject-2.0.so.0 + 0x31f11)
                #2  0x00007fd16748bfd3 g_signal_emit (libgobject-2.0.so.0 + 0x31fd3)
                #3  0x00007fd15ff15830 g_application_real_local_command_line (libgio-2.0.so.0 + 0xe1830)
                #4  0x00007fd15ff159d3 g_application_run (libgio-2.0.so.0 + 0xe19d3)
                #5  0x00007fd167453056 ffi_call_unix64 (libffi.so.8 + 0x9056)
                #6  0x00007fd16744f6a0 ffi_call_int.lto_priv.0 (libffi.so.8 + 0x56a0)
                #7  0x00007fd1674524ee ffi_call (libffi.so.8 + 0x84ee)
                #8  0x00007fd16750a1ad n/a (/var/home/pervoj/Temp/gtk-js-tmp/node_modules/node-gtk/lib/binding/node-v120-linux-x64/node_gtk.node + 0x2d1ad)
                #9  0x00007fd16750a6a4 n/a (/var/home/pervoj/Temp/gtk-js-tmp/node_modules/node-gtk/lib/binding/node-v120-linux-x64/node_gtk.node + 0x2d6a4)
                #10 0x00007fd1675088f4 n/a (/var/home/pervoj/Temp/gtk-js-tmp/node_modules/node-gtk/lib/binding/node-v120-linux-x64/node_gtk.node + 0x2b8f4)
                #11 0x00007fd15fc0eadd n/a (n/a + 0x0)
                #12 0x00007fd15fc0cf18 n/a (n/a + 0x0)
                #13 0x00007fd15fc4cacd n/a (n/a + 0x0)
                #14 0x00007fd15fc0ab1c n/a (n/a + 0x0)
                #15 0x00007fd15fc0a843 n/a (n/a + 0x0)
                #16 0x00000000012121ab n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xe121ab)
                #17 0x0000000001212f50 n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xe12f50)
                #18 0x000000000121348a n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xe1348a)
                #19 0x00000000015a5a06 n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0x11a5a06)
                #20 0x00000000015a5fe8 n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0x11a5fe8)
                #21 0x00000000015a61b9 n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0x11a61b9)
                #22 0x00000000010cea9c n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xccea9c)
                #23 0x0000000000dcc0eb n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0x9cc0eb)
                #24 0x00007fd15fc0eadd n/a (n/a + 0x0)
                #25 0x00007fd15fc0cf18 n/a (n/a + 0x0)
                #26 0x00007fd15fc499c3 n/a (n/a + 0x0)
                #27 0x00007fd15fd15d31 n/a (n/a + 0x0)
                #28 0x00007fd15fc374e8 n/a (n/a + 0x0)
                #29 0x00007fd15fc0aa43 n/a (n/a + 0x0)
                #30 0x00000000012123dd n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xe123dd)
                #31 0x000000000121358f n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xe1358f)
                #32 0x00000000012440c7 n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xe440c7)
                #33 0x000000000124446d n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xe4446d)
                #34 0x0000000000d28c1b n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0x928c1b)
                #35 0x0000000000d28e31 n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0x928e31)
                #36 0x0000000000eb232f n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xab232f)
                #37 0x0000000000eb58cf n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xab58cf)
                #38 0x0000000000eb5d58 n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xab5d58)
                #39 0x0000000000d29bf1 n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0x929bf1)
                #40 0x0000000000e80101 n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xa80101)
                #41 0x0000000000e80b6d n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0xa80b6d)
                #42 0x0000000000dd3bcf n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0x9d3bcf)
                #43 0x00007fd167610088 __libc_start_call_main (libc.so.6 + 0x2a088)
                #44 0x00007fd16761014b __libc_start_main@@GLIBC_2.34 (libc.so.6 + 0x2a14b)
                #45 0x0000000000d2717e n/a (/var/home/pervoj/.nvm/versions/node/v21.7.2/bin/node + 0x92717e)
                ELF object binary architecture: AMD x86-64

Here is my code:

import gi from "node-gtk";

const Gio = gi.require("Gio", "2.0");
const Gtk = gi.require("Gtk", "4.0");
const Adw = gi.require("Adw", "1");

class Win extends Adw.ApplicationWindow {
  static GTypeName = "Win";

  constructor(app) {
    super({ application: app });

    this.setTitle("Node GTK App");

    const label = new Gtk.Label({ label: "Hello Gtk+" });
    this.setContent(label);
  }
}

class App extends Adw.Application {
  static GTypeName = "App";

  constructor() {
    super({
      application_id: "cz.pervoj.NodeGtkTest",
      flags: Gio.ApplicationFlags.FLAGS_NONE,
    });

    // this.on("activate", () => this.onActivate());
  }

  activate() {
    (this.activeWindow ?? new Win(this)).present();
  }
}

gi.registerClass(Win);
gi.registerClass(App);

const app = new App();
app.run(process.argv.slice(2));

I believe this is not new and this is a reason why all examples use the signal.