Xwayland creates and destroys the CRTC along with the Wayland outputs, so there is possibly a case where the number of CRTC drops to 0.
xwl_present_get_crtc() always return
crtcs which is
numCrtcs is 0.
That leads to crash if a client queries the Present capabilities when there is no CRTC, the backtrace looks like:
#0 raise() from libc.so #1 abort() from libc.so #2 OsAbort() at utils.c:1350 #3 AbortServer() at log.c:879 #4 FatalError() at log.c:1017 #5 OsSigHandler() at osinit.c:156 #6 OsSigHandler() at osinit.c:110 #7 <signal handler called> #8 main_arena() from libc.so #9 proc_present_query_capabilities() at present_request.c:236 #10 Dispatch() at dispatch.c:478 #11 dix_main() at main.c:276
To avoid returning an invalid pointer (
crtcs) in that case, simply
numCrtcs being 0 and return
NULL in that case.
Thanks to Michel Dänzer email@example.com for pointing this as a possible cause of the crash.