unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Joe Corneli via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
To: Po Lu <luangruo@yahoo.com>
Cc: 56869@debbugs.gnu.org
Subject: bug#56869: 29.0.50; segfault, "assertion 'GDK_IS_DEVICE (device)' failed"
Date: Thu, 18 Aug 2022 14:20:27 +0100	[thread overview]
Message-ID: <87a681663o.fsf@Proteus> (raw)
In-Reply-To: <874jyap981.fsf@yahoo.com>


Po Lu writes:

> Joe Corneli <joseph.corneli@hyperreal.enterprises> writes:
>
>> Joe Corneli writes:
>>>
>>> In light of the previous, I think this is what’s needed.  Details will
>>> be forthcoming with the next crash!
>>>
>>> joe@Proteus:~$  sudo apt-get source libgtk-3-0
>>
>> OK, here’s the next round of backtrace.  Now it includes some Lisp
>> details, implicating feebleline (https://melpa.org/#/feebleline) as the
>> source of the problems.
>
> Async input can be read almost anywhere, and that includes from Lisp.
> So feebleline is most likely not the problem here.

For now, I’ve turned off the feature that seemed most suspicious...
https://github.com/tautologyclub/feebleline/issues/66

If it turns out that I don’t have any crashes then great!  Otherwise,
more reports will surely follow.

> As I said, the line number is unfortunately not very informative, so
> please type "l" to show a listing of the GDK code at that particular
> line.
>
> Thanks.

Sure, though I forgot to save the core file last time, so I can’t press
"l" in gdb, but here are indicative code snippets from the files named
in the previous backtrace.  The mentioned lines are marked below:

...  M-x occur RET /\*[0-9]+\*/ RET

Thank you!

>> #0  gdk_x11_device_manager_xi2_translate_event
>>     (xevent=<optimised out>, event=<optimised out>, display=<optimised out>, translator=<optimised out>)
>>     at ../../../../../gdk/x11/gdkdevicemanager-xi2.c:1794

        event->motion.type = GDK_MOTION_NOTIFY;
        event->motion.window = window;
        event->motion.time = xev->time;
        event->motion.x = (gdouble) xev->event_x / scale;
        event->motion.y = (gdouble) xev->event_y / scale;
        event->motion.x_root = (gdouble) xev->root_x / scale;
        event->motion.y_root = (gdouble) xev->root_y / scale;

        event->motion.device = device;
        gdk_event_set_source_device (event, source_device);
        gdk_event_set_seat (event, gdk_device_get_seat (device));
        gdk_event_set_device_tool (event, source_device->last_tool); /*1794*/

        event->motion.state = _gdk_x11_device_xi2_translate_state (&xev->mods, &xev->buttons, &xev->group);

#ifdef XINPUT_2_2
        if (xev->flags & XIPointerEmulated)
          gdk_event_set_pointer_emulated (event, TRUE);
#endif

>> #1  gdk_x11_device_manager_xi2_translate_event
>>     (translator=<optimised out>, display=<optimised out>, event=<optimised out>, xevent=<optimised out>)
>>     at ../../../../../gdk/x11/gdkdevicemanager-xi2.c:1478

static gboolean
gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, /*1478*/
                                            GdkDisplay         *display,
                                            GdkEvent           *event,
                                            XEvent             *xevent)
{
  GdkX11DeviceManagerXI2 *device_manager;
  XGenericEventCookie *cookie;
  GdkDevice *device, *source_device;
  gboolean return_val = TRUE;
  GdkWindow *window;
  GdkWindowImplX11 *impl;
  int scale;
  XIEvent *ev;
/*...*/

>> #2  0x00007ffff757e989 in _gdk_x11_event_translator_translate
>>     (translator=translator@entry=0x55555647e400, display=0x55555645a0e0, xevent=xevent@entry=0x7ffffffe9730)
>>     at ../../../../../gdk/x11/gdkeventtranslator.c:51

GdkEvent *
_gdk_x11_event_translator_translate (GdkEventTranslator *translator,
                                     GdkDisplay         *display,
                                     XEvent             *xevent)
{
  GdkEventTranslatorIface *iface;
  GdkEvent *event;

  g_return_val_if_fail (GDK_IS_EVENT_TRANSLATOR (translator), NULL);
  g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);

  iface = GDK_EVENT_TRANSLATOR_GET_IFACE (translator);

  if (!iface->translate_event)
    return NULL;

  event = gdk_event_new (GDK_NOTHING);

  if ((iface->translate_event) (translator, display, event, xevent)) /*51*/
    return event;

  gdk_event_free (event);

  return NULL;
}

>> #3  0x00007ffff757e4cc in gdk_event_source_translate_event (xevent=0x7ffffffe9730, event_source=0x55555648b380)
>>     at ../../../../../gdk/x11/gdkeventsource.c:230

static GdkEvent *
gdk_event_source_translate_event (GdkEventSource *event_source,
                                  XEvent         *xevent)
{
  GdkEvent *event = gdk_event_new (GDK_NOTHING);
  GdkFilterReturn result = GDK_FILTER_CONTINUE;
  GdkEventTranslator *event_translator;
  GdkWindow *filter_window;
  Display *dpy;

  dpy = GDK_DISPLAY_XDISPLAY (event_source->display);

#ifdef HAVE_XGENERICEVENTS
  /* Get cookie data here so it's available
   * to every event translator and event filter.
   */
  if (xevent->type == GenericEvent)
    XGetEventData (dpy, &xevent->xcookie);
#endif

  filter_window = gdk_event_source_get_filter_window (event_source, xevent,
                                                      &event_translator);
  if (filter_window)
    event->any.window = g_object_ref (filter_window);

  /* Run default filters */
  if (_gdk_default_filters)
    {
      /* Apply global filters */
      result = gdk_event_apply_filters (xevent, event, NULL);
    }

  if (result == GDK_FILTER_CONTINUE &&
      filter_window && filter_window->filters)
    {
      /* Apply per-window filters */
      result = gdk_event_apply_filters (xevent, event, filter_window);
    }

  if (result != GDK_FILTER_CONTINUE)
    {
#ifdef HAVE_XGENERICEVENTS
      if (xevent->type == GenericEvent)
        XFreeEventData (dpy, &xevent->xcookie);
#endif

      if (result == GDK_FILTER_REMOVE)
        {
          gdk_event_free (event);
          return NULL;
        }
      else /* GDK_FILTER_TRANSLATE */
        return event;
    }

  gdk_event_free (event);
  event = NULL;

  if (event_translator)
    {
      /* Event translator was gotten before in get_filter_window() */
      event = _gdk_x11_event_translator_translate (event_translator, /*230*/
                                                   event_source->display,
                                                   xevent);
    }
  else
    {
      GList *list = event_source->translators;

      while (list && !event)
        {
          GdkEventTranslator *translator = list->data;

          list = list->next;
          event = _gdk_x11_event_translator_translate (translator,
                                                       event_source->display,
                                                       xevent);
        }
    }

  if (event &&
      (event->type == GDK_ENTER_NOTIFY ||
       event->type == GDK_LEAVE_NOTIFY) &&
      event->crossing.window != NULL)
    {
      /* Handle focusing (in the case where no window manager is running */
      handle_focus_change (&event->crossing);
    }

#ifdef HAVE_XGENERICEVENTS
  if (xevent->type == GenericEvent)
    XFreeEventData (dpy, &xevent->xcookie);
#endif

  return event;
}

>> #4  _gdk_x11_display_queue_events (display=0x55555645a0e0) at
>>../../../../../gdk/x11/gdkeventsource.c:341

void
_gdk_x11_display_queue_events (GdkDisplay *display)
{
  GdkEvent *event;
  XEvent xevent;
  Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
  GdkEventSource *event_source;
  GdkX11Display *display_x11;

  display_x11 = GDK_X11_DISPLAY (display);
  event_source = (GdkEventSource *) display_x11->event_source;

  while (!_gdk_event_queue_find_first (display) && XPending (xdisplay))
    {
      XNextEvent (xdisplay, &xevent);

      switch (xevent.type)
        {
        case KeyPress:
        case KeyRelease:
          break;
        default:
          if (XFilterEvent (&xevent, None))
            continue;
        }

      event = gdk_event_source_translate_event (event_source, &xevent); /*341*/

      if (event)
        {
          GList *node;

          node = _gdk_event_queue_append (display, event);
          _gdk_windowing_got_event (display, node, event, xevent.xany.serial);
        }
    }
}

>> #5  0x00007ffff75460e4 in gdk_display_get_event (display=display@entry=0x55555645a0e0)
>>     at ../../../../gdk/gdkdisplay.c:441

GdkEvent*
gdk_display_get_event (GdkDisplay *display)
{
  g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);

  if (display->event_pause_count == 0)
    GDK_DISPLAY_GET_CLASS (display)->queue_events (display); /*441*/

  return _gdk_event_unqueue (display);
}

>> #6  0x00007ffff757e0e6 in gdk_event_source_dispatch
>>     (source=<optimised out>, callback=<optimised out>, user_data=<optimised out>)
>>     at ../../../../../gdk/x11/gdkeventsource.c:363

static gboolean
gdk_event_source_dispatch (GSource     *source,
                           GSourceFunc  callback,
                           gpointer     user_data)
{
  GdkDisplay *display = ((GdkEventSource*) source)->display;
  GdkEvent *event;

  gdk_threads_enter ();

  event = gdk_display_get_event (display); /*363*/

  if (event)
    {
      _gdk_event_emit (event);

      gdk_event_free (event);
    }

  gdk_threads_leave ();

  return TRUE;
}





-- 
Dr Joseph A. Corneli (https://github.com/holtzermann17)

HYPERREAL ENTERPRISES LTD is a private company limited by shares, incorporated
25th, June 2019 as Company Number 634284 on the Register of Companies for
Scotland (https://beta.companieshouse.gov.uk/company/SC634284).





  reply	other threads:[~2022-08-18 13:20 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-01 13:08 bug#56869: 29.0.50; segfault, "assertion 'GDK_IS_DEVICE (device)' failed" Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-02  1:17 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-02 14:17   ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-02 18:22     ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-03  1:14       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-11  9:56         ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-11 11:48           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-11 13:34             ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-12  1:17               ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-12 11:45                 ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-12 12:35                   ` Eli Zaretskii
2022-08-12 13:23                     ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-14 11:21                     ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-12 12:36                   ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-14 11:18                     ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-15 14:00                       ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-16  0:58                         ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-16 10:14                           ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-16 10:52                             ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-16 14:36                               ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-17 13:47                                 ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-18  2:38                                   ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-18 13:20                                     ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors [this message]
2022-08-19  1:42                                       ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-21  9:57                                         ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-21 10:56                                           ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-21 11:00                                             ` Eli Zaretskii
2022-08-22  6:21                                               ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-22  6:37                                                 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-08-22 11:27                                                   ` Eli Zaretskii
2022-08-22 12:59                                                   ` Joe Corneli via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-03  9:13                                             ` Stefan Kangas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87a681663o.fsf@Proteus \
    --to=bug-gnu-emacs@gnu.org \
    --cc=56869@debbugs.gnu.org \
    --cc=joseph.corneli@hyperreal.enterprises \
    --cc=luangruo@yahoo.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).