Picom: Running out of XIDs with a very large window

Created on 4 Dec 2019  路  6Comments  路  Source: yshui/picom

Platform


Ubuntu desktop 18.04 amd64

GPU, drivers, and screen setup

Nvidia GTX 1050, proprietary drivers version 430.50

$ glxinfo -B
name of display: :0
display: :0  screen: 0
direct rendering: Yes
Memory info (GL_NVX_gpu_memory_info):
    Dedicated video memory: 4096 MB
    Total available memory: 4096 MB
    Currently available dedicated video memory: 2423 MB
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GTX 1050/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 430.50
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

OpenGL version string: 4.6.0 NVIDIA 430.50
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 430.50
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

Environment

i3wm 4.17-192-g237ceda4a

picom version

Version: vgit-d4e76b2

Extensions:

  • Shape: Yes
  • XRandR: Yes
  • Present: Present

Misc:

  • Use Overlay: Yes
  • Config file used: /home/josh/.config/compton.conf

Drivers (inaccurate):

NVIDIA, modesetting

Configuration:

# Backend ##############################################################

# Can be "xrender" or "glx"; GLX is faster (usually) but needs a sane driver.
backend = "glx";

# GLX backend ##########################################################

# Magically improve performance. Can allegedly cause issues with transparency.
# glx-no-stencil = true;

# Possible big performance boost on partial screen updates, but breaks with some drivers.
# glx-no-rebind-pixmap = true;

# Only render to parts of the screen that actually changed.
# use-damage = false;

# Vsync ################################################################

vsync = true;

# Attempt to unredirect when a fullscreen window is detected for improved performance.
# unredir-if-possible = true;
# Don't unredirect windows that asked for compositing.
unredir-if-possible-exclude = [
    "_NET_WM_BYPASS_COMPOSITOR@:c = 2",
    "class_g = 'Totem'"
];

# Shadow ###############################################################

shadow = true;
# henlo buffer number 7
# https://github.com/chjj/compton/issues/408
shadow-exclude = [
    "class_g = 'i3-frame'",
    "class_g = 'i3bar'",
    # don't draw shadows for hidden windows (e.g. those in other tabs), but only if they're not floating
    # the update-notifier window is always "hidden", even when it's visible, so this hack is required
    # "_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
    # originally:
    # "_NET_WM_STATE@[0]:32a *= '_NET_WM_STATE_HIDDEN' && !I3_FLOATING_WINDOW@:c = 1",
    # "_NET_WM_STATE@[1]:32a *= '_NET_WM_STATE_HIDDEN' && !I3_FLOATING_WINDOW@:c = 1",
    "_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN' && !I3_FLOATING_WINDOW@:c = 1"
    # "_GTK_FRAME_EXTENTS@:c", # avoid double shadows on some windows?
];
# shadow-exclude-reg = "x31+0-0"; # don't draw shadows under i3bar
xinerama-shadow-crop = true; # don't draw shadows across displays

# Fading ###############################################################
# Step the fade every 5ms.
fade-delta = 5;
# Only fade certain windows.
wintypes:
{
    tooltip = { fade = true; };
    notify = { fade = true; };
}

Steps of reproduction

  1. Run Picom
  2. Open a window
  3. Resize it to become very large (I reproduced this with a window with width 5087 and height 3240; reducing the width by a few pixels seemed to be enough to stop it crashing)
  4. Observe that Picom crashes.

Alternatively you can just start Picom while a very large window is open, then it crashes immediately.

Expected behavior

Picom shouldn't crash when a large window is open.

Current Behavior

Picom crashes when a large window is open:

[ 04/12/19 21:38:46.636 x_fence_sync ERROR ] Failed to trigger the fence.
[ 04/12/19 21:38:46.636 paint_all ERROR ] x_fence_sync failed, xrender-sync-fence will be disabled from now on.
[ 04/12/19 21:38:46.697 glx_bind_pixmap ERROR ] Failed to query info of pixmap 0x0c00037b.
[ 04/12/19 21:38:46.697 win_paint_shadow ERROR ] Window 0x004028a5 is missing shadow data.
[ 04/12/19 21:38:46.697 x_new_id FATAL ERROR ] We seems to have run of XIDs. This is either a bug in the X server, or a resource leakage in the compositor. Please open an issue about this problem. The compositor will die.
Aborted (core dumped)

Stack trace

I'm not 100% sure this is a correct stack trace, since I had some trouble generating it, but it seems reasonable.

#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x00007ffff46ca801 in __GI_abort () at abort.c:79
#2  0x000055555557a40f in x_new_id (c=0x5555557c4880) at ../src/x.h:83
#3  0x000055555557b4b1 in paint_one (ps=0x5555557cfc40, w=0x555555a051d0, reg_paint=0x7fffffffd830) at ../src/render.c:268
#4  0x000055555557dad5 in paint_all (ps=0x5555557cfc40, t=0x555555a0a3d0, ignore_damage=false) at ../src/render.c:923
#5  0x0000555555563d3b in _draw_callback (loop=0x7ffff782f8e0, ps=0x5555557cfc40, revents=8192) at ../src/picom.c:1448
#6  0x0000555555563c43 in _draw_callback (loop=0x7ffff782f8e0, ps=0x5555557cfc40, revents=8192) at ../src/picom.c:1431
#7  0x0000555555563e00 in draw_callback (loop=0x7ffff782f8e0, w=0x5555557cfd00, revents=8192) at ../src/picom.c:1469
#8  0x00007ffff7625d73 in ev_invoke_pending () from /usr/lib/x86_64-linux-gnu/libev.so.4
#9  0x00007ffff76293de in ev_run () from /usr/lib/x86_64-linux-gnu/libev.so.4
#10 0x0000555555566c5b in session_run (ps=0x5555557cfc40) at ../src/picom.c:2287
#11 0x0000555555566f52 in main (argc=1, argv=0x7fffffffdbc8) at ../src/picom.c:2388

Most helpful comment

np. I don't intend to fix this problem in the old backends, as we will eventually make the new backends the default.

All 6 comments

probably related to #255 #196

Should have been fixed in next.

I'm getting the same crash on https://github.com/yshui/picom/commit/33a5cc604fb1dcca0abcad7c6b308973021440a2. Can reproduce this with a maximized Firefox window on a 5760x3240 viewport (3840x2160 display with 1.5 scale)

$ picom
[ 03/18/2020 14:28:18.551 open_config_file_at WARN ] This compositor has been renamed to "picom", the old config file paths is deprecated. Please replace the "compton"s in the path with "picom"
[ 03/18/2020 14:28:18.551 parse_config_libconfig WARN ] vsync option will take a boolean from now on. "opengl-swc" is interpreted as "true" for compatibility, but this will stop working soon
[ 03/18/2020 14:28:18.551 session_init WARN ] This compositor has been renamed to "picom", the "compton" binary will not be installed in the future.
[ 03/18/2020 14:28:18.746 x_fence_sync ERROR ] Failed to trigger the fence.
[ 03/18/2020 14:28:18.746 paint_all ERROR ] x_fence_sync failed, xrender-sync-fence will be disabled from now on.
[ 03/18/2020 14:28:23.842 glx_bind_pixmap ERROR ] Failed to query info of pixmap 0x05a0037f.
[ 03/18/2020 14:28:23.842 win_paint_shadow ERROR ] Window 0x0080019e is missing shadow data.
[ 03/18/2020 14:28:23.842 x_new_id FATAL ERROR ] We seems to have run of XIDs. This is either a bug in the X server, or a resource leakage in the compositor. Please open an issue about this problem. The compositor will die.
[1]    63416 abort (core dumped)  compton

$ picom --version
vgit-33a5c

@zenitraM are you using the experimental backends?

@yshui oh, you're right, I wasn't :sweat_smile: Seems to work with those indeed. Thanks!

np. I don't intend to fix this problem in the old backends, as we will eventually make the new backends the default.

Was this page helpful?
0 / 5 - 0 ratings