Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
M
mutter
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 741
    • Issues 741
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge Requests 98
    • Merge Requests 98
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI / CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • GNOME
  • mutter
  • Issues
  • #398

Closed
Open
Opened Nov 21, 2018 by Térence Clastres@t.clastres

Freeze when receiving a keypress from a different input device than the last keypress

[only exists on Xorg]

  • Reproduction Steps:
    1. Get two keyboards or any input source able to send keypresses
    2. press some keys on both simultaneously
    3. Notice as long as you keep doing it, everything will be frozen

Attaching GDB to gnome-shell and reproducing the issue shows keymap_changed() is called each time it receives a keypress by a different input from the last one.

Calling it once seem to be enough to produce a very short freeze you would only notice when playing a game, but calling it quickly many times produces a continuous freeze.

Here is the backtrace when switching from one key input to a different one:

#0  0x00007f6b34718c21 in poll () at /usr/lib/libc.so.6
#1  0x00007f6b2f084630 in  () at /usr/lib/libxcb.so.1
#2  0x00007f6b2f085fef in  () at /usr/lib/libxcb.so.1
#3  0x00007f6b2f086103 in xcb_wait_for_reply ()
    at /usr/lib/libxcb.so.1
#4  0x00007f6b2f0c2b0a in xkb_x11_get_core_keyboard_device_id
   () at /usr/lib/libxkbcommon-x11.so.0
#5  0x00007f6b33552a9b in meta_backend_x11_get_keymap
   (backend=<optimized out>)
    at backends/x11/meta-backend-x11.c:638
#6  0x00007f6b3357dbc9 in reload_modmap
   (keys=keys@entry=0x560d172fa168) at core/keybindings.c:234
#7  0x00007f6b3358039d in reload_keybindings
   (display=0x560d172fa020) at core/keybindings.c:1123
#8  0x00007f6b341f916e in g_signal_emit_valist ()
    at /usr/lib/libgobject-2.0.so.0
#9  0x00007f6b341f9762 in g_signal_emit_by_name ()
    at /usr/lib/libgobject-2.0.so.0
#10 0x00007f6b3355328b in keymap_changed
   (backend=0x560d1640d130)
    at backends/x11/meta-backend-x11.c:303
#11 0x00007f6b3355328b in handle_host_xevent
   (event=0x7ffca6aec1a0, backend=0x560d1640d130)
    at backends/x11/meta-backend-x11.c:356
#12 0x00007f6b3355328b in x_event_source_dispatch
   (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>) at backends/x11/meta-backend-x11.c:436
#13 0x00007f6b3411b3cf in g_main_context_dispatch ()
    at /usr/lib/libglib-2.0.so.0
#14 0x00007f6b3411cf89 in  () at /usr/lib/libglib-2.0.so.0
#15 0x00007f6b3411df62 in g_main_loop_run ()
    at /usr/lib/libglib-2.0.so.0
#16 0x00007f6b33582acc in meta_run () at core/main.c:689
#17 0x0000560d15c5e782 in main
   (argc=<optimized out>, argv=<optimized out>)
    at ../gnome-shell/src/main.c:501

Arch Linux 4.18.19-lqx
gnome-shell 3.30.2
mutter 3.30.2

Edited Nov 22, 2018 by Térence Clastres
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
None
Due date
None
Reference: GNOME/mutter#398