mate-desktop / mate-applets

Applets for use with the MATE panel
http://www.mate-desktop.org
GNU General Public License v2.0
79 stars 67 forks source link

Stickynotes crashes on Alpine Linux and Gentoo #664

Open robertkirkman opened 6 months ago

robertkirkman commented 6 months ago

Expected behaviour

stickynotes-applet should be able to instantiate sticky notes in MATE on every popular distro

Actual behaviour

on the popular distros Alpine Linux and Gentoo, stickynotes-applet launches and creates an icon, but clicking "New Note" does nothing and double-clicking the icon after clicking "New Note" at least once makes an error popup appear

Several OS exhibiting expected behavior

Steps to reproduce the behaviour on affected distros

How to reproduce the crash:

  1. if necessary, recompile mate-applets without using --disable-stickynotes
  2. right click on a MATE panel->Add to Panel->Sticky Notes->Add->Right click Sticky Notes Icon->New Note->Double click Sticky Notes Icon

How to reproduce the backtrace:

  1. if necessary, recompile mate-applets without using --disable-stickynotes
  2. compile mate-applets and libX11 with debug symbols and unstripped
  3. open a shell and type this:
    gdb /usr/libexec/mate-applets/stickynotes-applet
    run
  4. right click on a MATE panel->Add to Panel->Sticky Notes->Add->Right click Sticky Notes Icon->New Note->Double click Sticky Notes Icon
  5. Type this in the shell:
    bt
stdout, stderr and backtrace

``` GNU gdb (Gentoo 13.2 vanilla) 13.2 Copyright (C) 2023 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-pc-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: . Find the GDB manual and other documentation resources online at: . For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from /usr/libexec/mate-applets/stickynotes-applet... (gdb) run Starting program: /usr/libexec/mate-applets/stickynotes-applet [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/libthread_db.so.1". [New Thread 0x7ffff36c56c0 (LWP 1507161)] [New Thread 0x7fffebfff6c0 (LWP 1507162)] [New Thread 0x7ffff2ec46c0 (LWP 1507163)] [New Thread 0x7ffff26616c0 (LWP 1507164)] [New Thread 0x7ffff1d816c0 (LWP 1507168)] [New Thread 0x7ffff0fff6c0 (LWP 1507169)] [Thread 0x7ffff0fff6c0 (LWP 1507169) exited] [New Thread 0x7ffff0fff6c0 (LWP 1507170)] [New Thread 0x7fffeb7fe6c0 (LWP 1507171)] [Thread 0x7ffff0fff6c0 (LWP 1507170) exited] [Thread 0x7fffeb7fe6c0 (LWP 1507171) exited] [New Thread 0x7fffeb7fe6c0 (LWP 1507172)] [New Thread 0x7ffff0fff6c0 (LWP 1507173)] [Thread 0x7fffeb7fe6c0 (LWP 1507172) exited] [Thread 0x7ffff0fff6c0 (LWP 1507173) exited] (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_window_set_screen: assertion 'GTK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_window_set_decorated: assertion 'GTK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_window_set_skip_taskbar_hint: assertion 'GTK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_window_set_skip_pager_hint: assertion 'GTK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_add_events: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_add_events: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_text_view_get_buffer: assertion 'GTK_IS_TEXT_VIEW (text_view)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_add_events: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_add_events: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_add_events: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_set_direction: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_window_stick: assertion 'GTK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_window_resize: assertion 'GTK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_image_set_from_icon_name: assertion 'GTK_IS_IMAGE (image)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_image_set_pixel_size: assertion 'GTK_IS_IMAGE (image)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_image_set_from_icon_name: assertion 'GTK_IS_IMAGE (image)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_image_set_pixel_size: assertion 'GTK_IS_IMAGE (image)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_image_set_from_icon_name: assertion 'GTK_IS_IMAGE (image)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_image_set_pixel_size: assertion 'GTK_IS_IMAGE (image)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_show: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_window_set_title: assertion 'GTK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_label_set_text: assertion 'GTK_IS_LABEL (label)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_override_background_color: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_override_background_color: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_override_background_color: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_override_background_color: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_override_background_color: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_override_background_color: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_override_color: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_override_color: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_override_font: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_override_font: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_text_view_set_editable: assertion 'GTK_IS_TEXT_VIEW (text_view)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_text_view_set_cursor_visible: assertion 'GTK_IS_TEXT_VIEW (text_view)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_image_set_from_icon_name: assertion 'GTK_IS_IMAGE (image)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_set_tooltip_text: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_image_set_pixel_size: assertion 'GTK_IS_IMAGE (image)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_check_menu_item_set_active: assertion 'GTK_IS_CHECK_MENU_ITEM (check_menu_item)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.306: gtk_widget_realize: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: g_object_ref: assertion 'G_IS_OBJECT (object)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.306: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.307: gtk_text_view_get_buffer: assertion 'GTK_IS_TEXT_VIEW (text_view)' failed (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: invalid (NULL) pointer instance (stickynotes-applet:1507158): GLib-GObject-CRITICAL **: 19:02:18.307: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.307: gtk_window_present_with_time: assertion 'GTK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:18.307: gtk_window_stick: assertion 'GTK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gtk-CRITICAL **: 19:02:20.483: gtk_widget_get_window: assertion 'GTK_IS_WIDGET (widget)' failed (stickynotes-applet:1507158): Gdk-CRITICAL **: 19:02:20.483: gdk_window_get_display: assertion 'GDK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gdk-CRITICAL **: 19:02:20.483: gdk_x11_display_get_xdisplay: assertion 'GDK_IS_DISPLAY (display)' failed (stickynotes-applet:1507158): Gdk-CRITICAL **: 19:02:20.483: gdk_window_get_display: assertion 'GDK_IS_WINDOW (window)' failed (stickynotes-applet:1507158): Gdk-CRITICAL **: 19:02:20.483: gdk_x11_get_xatom_by_name_for_display: assertion 'GDK_IS_DISPLAY (display)' failed (stickynotes-applet:1507158): Gdk-CRITICAL **: 19:02:20.483: gdk_x11_window_get_xid: assertion 'GDK_IS_X11_WINDOW (window)' failed Thread 1 "stickynotes-app" received signal SIGSEGV, Segmentation fault. 0x00007ffff6e9744e in XChangeProperty (dpy=dpy@entry=0x0, w=0, property=property@entry=0, type=type@entry=6, format=format@entry=32, mode=mode@entry=0, data=0x7fffffffd140 "\233\002", nelements=4) at /var/tmp/portage/x11-libs/libX11-1.8.7/work/libX11-1.8.7/src/ChProp.c:46 46 /var/tmp/portage/x11-libs/libX11-1.8.7/work/libX11-1.8.7/src/ChProp.c: No such file or directory. (gdb) bt #0 0x00007ffff6e9744e in XChangeProperty (dpy=dpy@entry=0x0, w=0, property=property@entry=0, type=type@entry=6, format=format@entry=32, mode=mode@entry=0, data=0x7fffffffd140 "\233\002", nelements=4) at /var/tmp/portage/x11-libs/libX11-1.8.7/work/libX11-1.8.7/src/ChProp.c:46 #1 0x000055555555bba4 in set_icon_geometry (height=, width=, y=, x=, window=0x0) at stickynotes.c:63 #2 stickynote_set_visible (note=0x5555555eb170, visible=) at stickynotes.c:749 #3 0x000055555555de1a in stickynote_show_notes (visible=0) at stickynotes_applet_callbacks.c:74 #4 stickynote_toggle_notes_visible () at stickynotes_applet_callbacks.c:81 #5 applet_button_cb (widget=, event=, applet=) at stickynotes_applet_callbacks.c:95 #6 0x00007ffff768fbf6 in () at /usr/lib64/libgtk-3.so.0 #7 0x00007ffff7283630 in g_closure_invoke () at /usr/lib64/libgobject-2.0.so.0 #8 0x00007ffff7296bbf in () at /usr/lib64/libgobject-2.0.so.0 #9 0x00007ffff7297fa9 in () at /usr/lib64/libgobject-2.0.so.0 #10 0x00007ffff729e242 in g_signal_emit_valist () at /usr/lib64/libgobject-2.0.so.0 #11 0x00007ffff729e2f7 in g_signal_emit () at /usr/lib64/libgobject-2.0.so.0 #12 0x00007ffff794a4ac in () at /usr/lib64/libgtk-3.so.0 #13 0x00007ffff77fb64e in () at /usr/lib64/libgtk-3.so.0 #14 0x00007ffff77fd246 in gtk_main_do_event () at /usr/lib64/libgtk-3.so.0 #15 0x00007ffff7ecbc35 in () at /usr/lib64/libgdk-3.so.0 #16 0x00007ffff7efd592 in () at /usr/lib64/libgdk-3.so.0 #17 0x00007ffff717dc02 in () at /usr/lib64/libglib-2.0.so.0 #18 0x00007ffff7180db7 in () at /usr/lib64/libglib-2.0.so.0 #19 0x00007ffff718169f in g_main_loop_run () at /usr/lib64/libglib-2.0.so.0 #20 0x00007ffff77fc42d in gtk_main () at /usr/lib64/libgtk-3.so.0 #21 0x00007ffff7fa30f1 in () at /usr/lib64/libmate-panel-applet-4.so.1 #22 0x0000555555559ec5 in main (argc=, argv=) at stickynotes_applet.c:87 ```

MATE general version

1.26.1 1.27.1

Package version

mate-applets-1.26.1-r3 (Alpine Linux) mate-applets-1.26.1 (Gentoo) mate-applets-1.26.1-r2 (Gentoo) mate-applets-1.27.1 (Gentoo)

C libraries: musl-1.2.4_git20230717-r4 (Alpine Linux) glibc-2.38-r9 (Gentoo)

Linux Distribution

Alpine Linux and Gentoo

Link to bugreport of your Distribution (requirement)

https://bugs.gentoo.org/922937 https://gitlab.alpinelinux.org/alpine/aports/-/issues/15719

image

lukefromdc commented 6 months ago

It looks from this like something is preventing the window for notes from being created or is destroying it. All those asserts showing an invalid GtkWindow, and the crash at stickynote_set_visible() where we have gtk_window_present() and gtk_window_move() show an invalid window, which could mean the whole object is not getting set up or is being destroyed or that the window is not getting set up properly.

I cannot test this as with no landline I cannot download distro installers, but this is a starting point from the backtrace and the asserts

herbertp commented 2 months ago

I'm observing the same issue on Mageia 9 here where no sticky notes are displayed and the applet crashes on double-click.

I debugged the issue a little and added some error fprintf() to stickynote_new_aux() like this:

    GError *error = NULL;
    gboolean res;

    res = gtk_builder_add_from_resource (builder,
                                   GRESOURCE "sticky-notes-note.ui",
                                   &error);
    fprintf(stderr, "%s:%d builder=%p res=%d error=(%d,%s)\n",
        __FILE__, __LINE__, builder, res,
        error ? error->code : 0,
        error ? error->message : "");

This triggers and shows the following output: stickynotes.c:122 builder=0x667190 res=0 error=(6,.:7:1 Invalid object type 'GtkSourceBuffer')

I then tried to remove the GtkSourceBuffer from sticky-notes-note.ui just for a test and then I get a similar message about GtkSourceView.

I checked that the gtksourceview libraries and development headers are installed (actually for version 3.0, 4 and 5) and part of the linker command when building (version 4 is used here).

I have no idea why the builder does not know GtkSourceBuffer or GtkSourceView but this results in the resource being empty and so no windows for the notes are generated and as soon as any window is actually displayed, the applet crashes.

Note that there are a ton of assertions failing for anything related to those windows with debug enabled but I presume this is to be expected as the code never checks that the note->w_window is non NULL.

Hope this helps, Herbert

PS: replacing GtkSourceBuffer with GtkTextBuffer and GtkSourceView with GtkTextView in sticky-notes-note.ui and removing the max_undo_levels property makes the applet work again.