Closed eyoung closed 3 years ago
It's hard to tell what actually caused this since debug symbols are missing. Can you please build picom with debug symbols and provide that stacktrace?
I have some better logs for you. Using a debug build based on the same commit arch has packaged.
picom: ../src/backend/backend.c:270: void paint_all_new(session_t *, struct managed_win *, _Bool): Assertion `!(w->flags & WIN_FLAGS_SHADOW_NONE)' failed.
#0 0x00007f535e6b3615 in raise () from /usr/lib/libc.so.6
#1 0x00007f535e69c862 in abort () from /usr/lib/libc.so.6
#2 0x00007f535e69c747 in __assert_fail_base.cold () from /usr/lib/libc.so.6
#3 0x00007f535e6abbf6 in __assert_fail () from /usr/lib/libc.so.6
#4 0x000055a16be5733c in paint_all_new (ps=0x55a16ddcdad0, t=0x55a16f4eff80, ignore_damage=false) at ../src/backend/backend.c:270
#5 0x000055a16be1ac76 in _draw_callback (loop=0x7f535ec42720, ps=0x55a16ddcdad0, revents=8192) at ../src/picom.c:1442
#6 0x000055a16be1a131 in draw_callback (loop=0x7f535ec42720, w=0x55a16ddcdb90, revents=8192) at ../src/picom.c:1466
#7 0x00007f535ec36033 in ev_invoke_pending () from /usr/lib/libev.so.4
#8 0x00007f535ec39902 in ev_run () from /usr/lib/libev.so.4
#9 0x000055a16be18487 in session_run (ps=0x55a16ddcdad0) at ../src/picom.c:2325
#10 0x000055a16be15c32 in main (argc=2, argv=0x7ffe0d1f9e18) at ../src/picom.c:2426
Thanks. There are multiple issues already with this assertion. However, this assertion hasn't been triggered yet just by blanking the screen. Usually some window is destroyed like in https://github.com/yshui/picom/issues/394.
Can you try if this PR https://github.com/yshui/picom/pull/479 fixes the assertion failure for you? If not, please capture a debug
or trace
log.
With that branch I am seeing
picom: ../src/backend/backend.c:268: void paint_all_new(session_t *, struct managed_win *, _Bool): Assertion `!(w->flags & WIN_FLAGS_SHADOW_NONE)' failed.
which seems to be the same assertion error
[ 09/11/2020 10:26:42.687 add_win DEBUG ] Adding window 0x006000f2
[ 09/11/2020 10:26:42.687 ev_handle DEBUG ] event Event 0 serial 0x0000697e window 0000000000 ""
[ 09/11/2020 10:26:42.687 x_print_error DEBUG ] X error 3 WINDOW request 2 minor 0 serial 26964
[ 09/11/2020 10:26:42.687 ev_handle DEBUG ] event CreateNoti serial 0x00006980 window 0x006000f8 "(Failed to get title)"
[ 09/11/2020 10:26:42.687 add_win DEBUG ] Adding window 0x006000f8
[ 09/11/2020 10:26:42.687 ev_handle DEBUG ] event ConfigureN serial 0x00006980 window 0x0020018d "i3bar for output HDMI-1"
[ 09/11/2020 10:26:42.687 ev_configure_notify DEBUG ] { send_event: 484, id: 0x0020018d, above: 0x0020007c, override_redirect: 1 }
[ 09/11/2020 10:26:42.687 restack_above DEBUG ] Restack 0x0020018d (i3bar for output HDMI-1), old_below: 0x00200082, new_below: 0x0020007c
[ 09/11/2020 10:26:42.687 ev_handle DEBUG ] event ConfigureN serial 0x00006980 window 0x00200199 "i3bar for output DP-2"
[ 09/11/2020 10:26:42.687 ev_configure_notify DEBUG ] { send_event: 484, id: 0x00200199, above: 0x00200072, override_redirect: 1 }
[ 09/11/2020 10:26:42.687 restack_above DEBUG ] Restack 0x00200199 (i3bar for output DP-2), old_below: 0x01200060, new_below: 0x00200072
[ 09/11/2020 10:26:42.687 ev_handle DEBUG ] event PropertyNo serial 0x00006980 window 0x000001e4 "(Root window)"
[ 09/11/2020 10:26:42.687 ev_handle DEBUG ] event PropertyNo serial 0x00006980 window 0x000001e4 "(Root window)"
[ 09/11/2020 10:26:42.687 ev_handle DEBUG ] event Event 0 serial 0x00006981 window 0000000000 ""
[ 09/11/2020 10:26:42.687 x_print_error DEBUG ] X error 3 WINDOW request 2 minor 0 serial 26964
[ 09/11/2020 10:26:42.687 handle_pending_updates DEBUG ] Delayed handling of events, entering critical section
[ 09/11/2020 10:26:42.688 ev_handle DEBUG ] event ConfigureN serial 0x00006983 window 0x002000dd "src : picom — Konsole"
[ 09/11/2020 10:26:42.688 ev_configure_notify DEBUG ] { send_event: 484, id: 0x002000dd, above: 0x00200088, override_redirect: 1 }
[ 09/11/2020 10:26:42.688 restack_above DEBUG ] Restack 0x002000dd (src : picom — Konsole), old_below: 0x00200088, new_below: 0x00200088
[ 09/11/2020 10:26:42.688 win_set_flags DEBUG ] Set flags 9 to window 0x002000dd (src : picom — Konsole)
[ 09/11/2020 10:26:42.688 win_set_flags DEBUG ] Set flags 9 to window 0x002000dd (src : picom — Konsole)
[ 09/11/2020 10:26:42.688 win_on_factor_change DEBUG ] Window 0x002000dd (src : picom — Konsole) factor change
[ 09/11/2020 10:26:42.688 win_determine_shadow DEBUG ] Determining shadow of window 0x002000dd (src : picom — Konsole)
[ 09/11/2020 10:26:42.688 win_on_factor_change DEBUG ] Window mode changed to 0
[ 09/11/2020 10:26:42.688 win_on_factor_change DEBUG ] Window 0x002000dd (src : picom — Konsole) factor change
[ 09/11/2020 10:26:42.688 win_determine_shadow DEBUG ] Determining shadow of window 0x002000dd (src : picom — Konsole)
[ 09/11/2020 10:26:42.688 win_on_factor_change DEBUG ] Window mode changed to 0
[ 09/11/2020 10:26:42.688 ev_handle DEBUG ] event ConfigureN serial 0x00006983 window 0x03c00007 "src : picom — Konsole"
[ 09/11/2020 10:26:42.688 ev_configure_notify DEBUG ] { send_event: 2097373, id: 0x03c00007, above: 0000000000, override_redirect: 0 }
[ 09/11/2020 10:26:42.689 ev_handle DEBUG ] event UnmapNotif serial 0x00006983 window 0x0020018d "i3bar for output HDMI-1"
[ 09/11/2020 10:26:42.689 unmap_win_start DEBUG ] Unmapping 0x0020018d "i3bar for output HDMI-1"
[ 09/11/2020 10:26:42.689 win_clear_flags DEBUG ] Clear flags 1 from window 0x0020018d (i3bar for output HDMI-1)
[ 09/11/2020 10:26:42.689 ev_handle DEBUG ] event DestroyNot serial 0x00006983 window 0x0020018d "i3bar for output HDMI-1"
[ 09/11/2020 10:26:42.689 destroy_win_start DEBUG ] Destroying 0x0020018d "i3bar for output HDMI-1", managed = 1
[ 09/11/2020 10:26:42.689 win_clear_flags DEBUG ] Clear flags 9 from window 0x0020018d (i3bar for output HDMI-1)
[ 09/11/2020 10:26:42.689 ev_handle DEBUG ] event Event 0 serial 0x00006984 window 0000000000 ""
[ 09/11/2020 10:26:42.689 x_print_error DEBUG ] X error 3 WINDOW request 2 minor 0 serial 26964
[ 09/11/2020 10:26:42.689 fill_win DEBUG ] Managing window 0x006000f8
[ 09/11/2020 10:26:42.689 fill_win DEBUG ] Managing window 0x006000f2
[ 09/11/2020 10:26:42.689 fill_win DEBUG ] Managing window 0x00a010a6
[ 09/11/2020 10:26:42.689 fill_win DEBUG ] Managing window 0x006000ec
[ 09/11/2020 10:26:42.689 fill_win DEBUG ] Managing window 0x00c00161
[ 09/11/2020 10:26:42.689 win_recheck_client DEBUG ] (0x00200199): client self (override-redirected)
[ 09/11/2020 10:26:42.689 win_on_factor_change DEBUG ] Window 0x00200199 (i3bar for output DP-2) factor change
[ 09/11/2020 10:26:42.689 win_determine_shadow DEBUG ] Determining shadow of window 0x00200199 (i3bar for output DP-2)
[ 09/11/2020 10:26:42.689 win_set_shadow DEBUG ] Updating shadow property of window 0x00200199 (i3bar for output DP-2) to 1
[ 09/11/2020 10:26:42.689 win_set_flags DEBUG ] Set flags 8 to window 0x00200199 (i3bar for output DP-2)
[ 09/11/2020 10:26:42.689 win_on_factor_change DEBUG ] Window mode changed to 2
[ 09/11/2020 10:26:42.690 win_on_factor_change DEBUG ] Window 0x00200199 ([i3 con] container around 0x555857767440) factor change
[ 09/11/2020 10:26:42.690 win_determine_shadow DEBUG ] Determining shadow of window 0x00200199 ([i3 con] container around 0x555857767440)
[ 09/11/2020 10:26:42.690 win_on_factor_change DEBUG ] Window mode changed to 2
[ 09/11/2020 10:26:42.690 win_clear_flags DEBUG ] Clear flags 32 from window 0x00200199 ([i3 con] container around 0x555857767440)
[ 09/11/2020 10:26:42.690 win_recheck_client DEBUG ] (0x00200193): client self (override-redirected)
[ 09/11/2020 10:26:42.690 win_on_factor_change DEBUG ] Window 0x00200193 (i3bar for output DP-0) factor change
[ 09/11/2020 10:26:42.690 win_determine_shadow DEBUG ] Determining shadow of window 0x00200193 (i3bar for output DP-0)
[ 09/11/2020 10:26:42.690 win_set_shadow DEBUG ] Updating shadow property of window 0x00200193 (i3bar for output DP-0) to 1
[ 09/11/2020 10:26:42.690 win_set_flags DEBUG ] Set flags 8 to window 0x00200193 (i3bar for output DP-0)
[ 09/11/2020 10:26:42.690 win_on_factor_change DEBUG ] Window mode changed to 2
[ 09/11/2020 10:26:42.690 win_on_factor_change DEBUG ] Window 0x00200193 ([i3 con] container around 0x55585775bb10) factor change
[ 09/11/2020 10:26:42.690 win_determine_shadow DEBUG ] Determining shadow of window 0x00200193 ([i3 con] container around 0x55585775bb10)
[ 09/11/2020 10:26:42.690 win_on_factor_change DEBUG ] Window mode changed to 2
[ 09/11/2020 10:26:42.690 win_clear_flags DEBUG ] Clear flags 32 from window 0x00200193 ([i3 con] container around 0x55585775bb10)
[ 09/11/2020 10:26:42.690 win_release_pixmap DEBUG ] Releasing pixmap of window 0x002000dd (src : picom — Konsole)
[ 09/11/2020 10:26:42.691 win_bind_pixmap DEBUG ] New named pixmap for 0x002000dd (src : picom — Konsole) : 0x0080012f
[ 09/11/2020 10:26:42.692 glx_find_fbconfig DEBUG ] Looking for FBConfig for RGBA8888, depth 32
[ 09/11/2020 10:26:42.692 glx_bind_pixmap DEBUG ] depth 32, rgba 1
[ 09/11/2020 10:26:42.693 win_clear_flags DEBUG ] Clear flags 2 from window 0x002000dd (src : picom — Konsole)
[ 09/11/2020 10:26:42.693 win_release_shadow DEBUG ] Releasing shadow of window 0x002000dd (src : picom — Konsole)
[ 09/11/2020 10:26:42.696 glx_find_fbconfig DEBUG ] Looking for FBConfig for RGBA8888, depth 32
[ 09/11/2020 10:26:42.697 glx_bind_pixmap DEBUG ] depth 32, rgba 1
[ 09/11/2020 10:26:42.698 win_bind_shadow DEBUG ] New shadow for 0x002000dd (src : picom — Konsole)
[ 09/11/2020 10:26:42.698 win_clear_flags DEBUG ] Clear flags 16 from window 0x002000dd (src : picom — Konsole)
[ 09/11/2020 10:26:42.698 win_clear_flags DEBUG ] Clear flags 9 from window 0x002000dd (src : picom — Konsole)
[ 09/11/2020 10:26:42.698 win_recheck_client DEBUG ] (0x0020018d): client self (override-redirected)
[ 09/11/2020 10:26:42.698 win_clear_flags DEBUG ] Clear flags 32 from window 0x0020018d (i3bar for output HDMI-1)
[ 09/11/2020 10:26:42.698 win_clear_flags WARN ] Flags cleared on a destroyed window 0x0020018d (i3bar for output HDMI-1)
[ 09/11/2020 10:26:42.698 handle_pending_updates DEBUG ] Exited critical section
Hmm, same assertion but seems to be a different cause than in the linked issue.
It looks as if i3 is destroying the i3bar windows when the screens go to sleep (at least the one on HDMI-1 is destroyed). The ones on DP-0 and DP-2 seem to loose their wintype=dock
and therefore gain a shadow which doesn't get created in time.
I'm having the same issue, though I have almost nothing in common outside of using i3 and Arch. I've not tried any debugging or anything since I just installed this fork yesterday. It also doesn't happen every time the monitors go to sleep for me, so it hasn't been a huge issue. Just annoying.
Platform- Arch Linux GPU, drivers, and screen setup RX 580, 2 monitors 1080p, amdgpu Not using i3bar or i3status, but polybar.
Environment
i3-gaps
picom version
vgit-aef1b
Extensions:
Shape: No
XRandR: Yes
Drivers (inaccurate): amdgpu
I can post my config if that is something that is needed, but it's just the default one that comes with this fork with dual-kawase enabled. That's the only change I made.
Just for the record:
It seems as if win_recheck_client()
is called at the end of win_process_image_flags()
which is responsible for (re-)creating the shadow images. win_recheck_client()
however calls win_mark_client()
which in turn calls win_update_wintype()
. The wm-containers for the i3bar windows seem to have lost their i3bar child-windows, so their wintype likely changes from dock
to normal
. Due to the configuration they now should have a shadow and the appropriate flags are set. Later on win_mark_client()
calls win_on_factor_change()
directly but nothing has changed since the last call.
Since this update to the shadow flags happens AFTER we handled (re-)creation of the shadow based on the now outdated flags for this rendering pass, the backend tries to render a shadow that hasn't been created yet.
TL;DR: Currently the shadow-state is re-evaluated after we checked if we have to create the shadow image in win_process_image_flags()
.
Turns out I can reproduce the assertion crash (#487) pretty easily with TRACE logs turned on, if this helps https://gist.github.com/frebib/aa8d4e6c6d4ea995d89011e5e624f49d/raw with config https://github.com/frebib/dotfiles/blob/master/picom/picom.conf
This happens pretty reliably when I call my dpi
script for changing display/application scale on the fly. It changes some X11 things then reloads i3 (i3-msg restart
) and polybar (polybar-msg cmd restart -p $MAINPID
)
https://github.com/frebib/dotfiles/blob/master/scripts/dpi#L28
edit: this is with #479 applied to next HEAD
(currently 9bb21fc)
Thanks for the TRACE log @frebib. This indeed looks to be the same issue and not directly to be related to https://github.com/yshui/picom/pull/479 (apart from triggering the same assertion).
You can see the polybar window 0x01800002
receiving the unmap event and getting detached from its i3-frame parent 0x01200077
. The i3-frame is then flagged as STALE and gets updated by win_recheck_client()
as described above. It seems the original polybar window is unmapped, reparented two times and then mapped again, probably due to i3 restarting.
Let me see if I can build an automated test case for that.
Although I haven't yet been able to create a (not) working automated test case, I could trigger it in a testing environment with i3.
I've updated https://github.com/yshui/picom/pull/479 to check client windows prior to updating the images which should in theory fix this issue without breaking something else. I'd be glad if you could confirm this fixes the crashes you are encountering.
It seems that 24463c3 fixes the crash I was able to reproduce when polybar is unmapped & i3 is restarted, nice work!
Platform
Arch Linux
GPU, drivers, and screen setup
Nvidia GTX 1080, Nvidia Drivers 450.66-18, 3 monitors 2, 4k, 1 standard side by side.
Environment
i3-gaps
picom version
vgit-e553e
Version: vgit-e553e
Extensions:
Misc:
Drivers (inaccurate):
NVIDIA
Configuration:
Steps of reproduction
Expected behavior
Picom does not crash
Current Behavior
Picom crashes
Stack trace
[1] 14631 segmentation fault (core dumped) picom --experimental-backends
coredumpctl info 14631
PID: 14631 (picom) UID: 1000 (eyoung) GID: 1000 (eyoung) Signal: 11 (SEGV) Timestamp: Thu 2020-09-10 15:57:41 MDT (41min ago) Command Line: picom --experimental-backends Executable: /usr/bin/picom Control Group: /user.slice/user-1000.slice/session-7.scope Unit: session-7.scope Slice: user-1000.slice Session: 7 Owner UID: 1000 (eyoung) Boot ID: b921acecf75e49ea91406c123dddfb96 Machine ID: 21903ef5f2334ab4b8ff6f1232f783f5 Hostname: archphoenix Storage: /var/lib/systemd/coredump/core.picom.1000.b921acecf75e49ea91406c123dddfb96.14631.1599775061000000.zst Message: Process 14631 (picom) of user 1000 dumped core.
➜ ~
Other details