yshui / picom

A lightweight compositor for X11 with animation support
https://picom.app/
Other
4.14k stars 588 forks source link

core dump: running out of x_id's #1373

Open svenrademakers opened 1 day ago

svenrademakers commented 1 day ago

Platform

Arch Linux 6.11.5-arch1-1 #1 SMP PREEMPT_DYNAMIC Tue, 22 Oct 2024 18:31:38 +0000 x86_64 GNU/Linux

GPU, drivers, and screen setup

I have a laptop with an integrated and discrete GPU:

# lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Alder Lake-HX GT1 [UHD Graphics 770] (rev 0c)
01:00.0 VGA compatible controller: NVIDIA Corporation GA107GLM [RTX A1000 Laptop GPU] (rev a1)

OpenGL version string: 4.6.0 NVIDIA 560.35.03 OpenGL shading language version string: 4.60 NVIDIA OpenGL context flags: (none) OpenGL profile mask: (none)

OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 560.35.03 OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

```shell
Name            : nvidia
Version         : 560.35.03-17
Description     : NVIDIA kernel modules
Architecture    : x86_64
URL             : https://www.nvidia.com/
Licenses        : custom
Groups          : None
Provides        : NVIDIA-MODULE
Depends On      : linux  nvidia-utils=560.35.03  libglvnd
Optional Deps   : None
Required By     : None
Optional For    : None
Conflicts With  : None
Replaces        : None
Installed Size  : 51.27 MiB
Packager        : Jan Alexander Steffens (heftig) <heftig@archlinux.org>
Build Date      : Tue 22 Oct 2024 07:52:34 PM BST
Install Date    : Thu 24 Oct 2024 02:56:13 PM BST
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : Signature

Environment

Xserver, i3, lightdm, i3-gaps

picom version

picom --version v12.3 (/startdir/picom revision 1b27f3e)

Diagnostics **Version:** v12.3 (/startdir/picom revision 1b27f3e) ### Extensions: * Shape: Yes * RandR: Yes * Present: Present ### Misc: * Use Overlay: No (Another compositor is already running) * Config file specified: None * Config file used: /home/svenr/.config/picom.conf ### Drivers (inaccurate): NVIDIA, modesetting ### Backend: glx * Driver vendors: * GLX: NVIDIA Corporation * GL: NVIDIA Corporation * GL renderer: NVIDIA RTX A1000 Laptop GPU/PCIe/SSE2 [ 10/25/2024 09:23:51.748 egl_init WARN ] The egl backend is still experimental, use with care. ### Backend: egl * Driver vendors: * EGL: NVIDIA * GL: NVIDIA Corporation * GL renderer: NVIDIA RTX A1000 Laptop GPU/PCIe/SSE2

Configuration:

Configuration file ``` ################################# # Shadows # ################################# # Enabled client-side shadows on windows. Note desktop windows # (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow, # unless explicitly requested using the wintypes option. # # Can be set per-window using rules. # # Default: false shadow = true; # The blur radius for shadows, in pixels. # # Default: 12 shadow-radius = 9; # The opacity of shadows. # # Range: 0.0 - 1.0 # Default: 0.75 shadow-opacity = .5 # The left offset for shadows, in pixels. # # Default: -15 #shadow-offset-x = -7; # The top offset for shadows, in pixels. # # Default: -15 shadow-offset-y = -5; # Hex string color value of shadow. Formatted like "#RRGGBB", e.g. "#C0FFEE". # # Default: #000000 # shadow-color = "#000000" # Crop shadow of a window fully on a particular monitor to that monitor. This is # currently implemented using the X RandR extension. # # Default: false # crop-shadow-to-monitor = false ################################# # Fading # ################################# # Fade windows in/out when opening/closing and when opacity changes, # unless no-fading-openclose is used. Can be set per-window using rules. # # Default: false fading = false; # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) fade-in-step = 0.03; # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) fade-out-step = 0.03; # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) # fade-delta = 10 # Do not fade on window open/close. # no-fading-openclose = false # Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc. # no-fading-destroyed-argb = false ################################# # Transparency / Opacity # ################################# # Opacity of window titlebars and borders. # # Range: 0.1 - 1.0 # Default: 1.0 (disabled) frame-opacity = 1; # Use fixed inactive dim value, instead of adjusting according to window opacity. # # Default: false # inactive-dim-fixed = true ################################# # Corners # ################################# # Sets the radius of rounded window corners. When > 0, the compositor will # round the corners of windows. Does not interact well with # `transparent-clipping`. # # Default: 0 (disabled) corner-radius = 15 ################################# # Blur # ################################# # Parameters for background blurring, see BLUR section in the man page for more information. # blur-method = # blur-size = 12 # # blur-deviation = false # # blur-strength = 5 # Blur background of semi-transparent / ARGB windows. # Can be set per-window using rules. # # Default: false # blur-background = false # Blur background of windows when the window frame is not opaque. # Implies: # blur-background # # Default: false # blur-background-frame = false # Use fixed blur strength rather than adjusting according to window opacity. # # Default: false # blur-background-fixed = false # Specify the blur convolution kernel, with the following format: # example: # blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"; # Can also be a pre-defined kernel, see the man page. # # Default: "" blur-kern = "3x3box"; ################################# # General Settings # ################################# # Enable remote control via D-Bus. See the man page for more details. # # Default: false # dbus = true # Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers. # daemon = false # Specify the backend to use: `xrender`, `glx`, or `egl`. # # Default: "xrender" backend = "glx" # Use higher precision during rendering, and apply dither when presenting the # rendered screen. Reduces banding artifacts, but may cause performance # degradation. Only works with OpenGL. dithered-present = false; # Enable/disable VSync. # # Default: false vsync = true; # Try to detect windows with rounded corners and don't consider them # shaped windows. The accuracy is not very high, unfortunately. # # Has nothing to do with `corner-radius`. # # Default: false detect-rounded-corners = true; # Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers # not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows. # # Default: false #detect-client-opacity = true; # Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window, # rather than listening to 'FocusIn'/'FocusOut' event. May be more accurate, # provided that the WM supports it. # # Default: false # use-ewmh-active-win = false # Unredirect all windows if a full-screen opaque window is detected, # to maximize performance for full-screen windows. Known to cause flickering # when redirecting/unredirecting windows. # # Default: false # unredir-if-possible = false # Delay before unredirecting the window, in milliseconds. # # Default: 0. # unredir-if-possible-delay = 0 # Use 'WM_TRANSIENT_FOR' to group windows, and consider windows # in the same group focused at the same time. # # Default: false #detect-transient = true; # Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same # group focused at the same time. This usually means windows from the same application # will be considered focused or unfocused at the same time. # 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too. # # Default: false # detect-client-leader = false # Use of damage information for rendering. This cause the only the part of the # screen that has actually changed to be redrawn, instead of the whole screen # every time. Should improve performance. # # Default: false use-damage = true; # Use X Sync fence to wait for the completion of rendering of other windows, # before using their content to render the current screen. # # Required for explicit sync drivers, such as nvidia. # # Default: false # xrender-sync-fence = false # GLX backend: Use specified GLSL fragment shader for rendering window # contents. Read the man page for a detailed explanation of the interface. # # Can be set per-window using rules. # # window-shader-fg = "default" # Force all windows to be painted with blending. Useful if you # have a `window-shader-fg` that could turn opaque pixels transparent. # # Default: false # force-win-blend = false # Do not use EWMH to detect fullscreen windows. # Reverts to checking if a window is fullscreen based only on its size and coordinates. # # Default: false # no-ewmh-fullscreen = false # Dimming bright windows so their brightness doesn't exceed this set value. # Brightness of a window is estimated by averaging all pixels in the window, # so this could comes with a performance hit. # Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. # # Default: 1.0 (disabled) # max-brightness = 1.0 # Make transparent windows clip other windows like non-transparent windows do, # instead of blending on top of them. e.g. placing a transparent window on top # of another window will cut a "hole" in that window, and show the desktop background # underneath. # # Default: false # transparent-clipping = false # Set the log level. Possible values are: # "trace", "debug", "info", "warn", "error" # in increasing level of importance. Case insensitive. # If using the "TRACE" log level, it's better to log into a file # using *--log-file*, since it can generate a huge stream of logs. # # Default: "warn" # log-level = "warn"; # Set the log file. # If *--log-file* is never specified, logs will be written to stderr. # Otherwise, logs will to written to the given file, though some of the early # logs might still be written to the stderr. # When setting this option from the config file, it is recommended to use an absolute path. # # log-file = "/path/to/your/log/file" # Write process ID to a file. # write-pid-path = "/path/to/your/log/file" # Rule-based per-window options. # # See WINDOW RULES section in the man page for how these work. rules: ({ match = "window_type = 'tooltip'"; fade = false; shadow = true; opacity = 0.75; full-shadow = false; }, { match = "window_type = 'dock' || " "window_type = 'desktop' || " "_GTK_FRAME_EXTENTS@"; blur-background = false; }, { match = "window_type != 'dock'"; # shader = "my_shader.frag"; }, { match = "window_type = 'dock' || " "window_type = 'desktop'"; corner-radius = 0; }, { match = "name = 'Notification' || " "class_g = 'Conky' || " "class_g ?= 'Notify-osd' || " "class_g = 'Cairo-clock' || " "_GTK_FRAME_EXTENTS@"; shadow = false; }) # `@include` directive can be used to include additional configuration files. # Relative paths are search either in the parent of this configuration file # (when the configuration is loaded through a symlink, the symlink will be # resolved first). Or in `$XDG_CONFIG_HOME/picom/include`. # # @include "extra.conf" ```

Steps of reproduction

It seem to happen quite consistently, my suspicion is that it crases right before my system goes into sleep mode, or X decides to go to sleep mode and turns off the display.

Expected behavior

No crashes

Current Behavior

picom crashes present in coredump list

Stack trace

attached is the coredump

Program terminated with signal SIGABRT, Aborted.
#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
44        return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO (ret) : 0;
[Current thread is 1 (Thread 0x795b32ba2a80 (LWP 3410))]
(gdb) bt
#0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44
#1  0x0000795b32d53463 in __pthread_kill_internal (threadid=<optimized out>, signo=6) at pthread_kill.c:78
#2  0x0000795b32cfa120 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#3  0x0000795b32ce14c3 in __GI_abort () at abort.c:79
#4  0x0000598bb4c35352 in x_new_id.part.0.lto_priv.2 (c=<optimized out>) at ../src/x.h:167
#5  0x0000598bb4c593fb in x_new_id (c=0x598bebc411a0) at ../src/wm/wm.c:260
#6  win_process_image_flags (ps=0x598bebc41060, w=0x598bec688500) at ../src/wm/win.c:542
#7  win_process_image_flags (ps=<optimized out>, w=0x598bec688500) at ../src/wm/win.c:519
#8  refresh_images (ps=0x598bebc41060) at ../src/picom.c:1660
#9  handle_pending_updates (ps=0x598bebc41060, delta_t=0) at ../src/picom.c:1710
#10 0x0000598bb4ca7543 in draw_callback_impl.isra.0 (ps=0x598bebc41060, revents=<optimized out>, loop=<optimized out>)
    at ../src/picom.c:1753
#11 0x0000598bb4c4fba0 in draw_callback (loop=0x795b33391060 <default_loop_struct>, w=0x598bebc410c0, revents=<optimized out>)
    at ../src/picom.c:1954
#12 0x0000795b3338613b in ev_invoke_pending (loop=0x795b33391060 <default_loop_struct>) at /usr/src/debug/libev/libev-4.33/ev.c:3770
#13 0x0000795b33389d22 in ev_run (loop=0x795b33391060 <default_loop_struct>, flags=0) at /usr/src/debug/libev/libev-4.33/ev.c:4190
#14 ev_run (loop=0x795b33391060 <default_loop_struct>, flags=flags@entry=0) at /usr/src/debug/libev/libev-4.33/ev.c:4021
#15 0x0000598bb4c35c07 in session_run (ps=<optimized out>) at ../src/picom.c:2764
#16 main (argc=<optimized out>, argv=<optimized out>) at ../src/picom.c:2879

core.picom.3410.zip

OpenGL trace

Other details

yshui commented 14 hours ago

can you xtrace the compositor as it crashes? and post the logs here.