mirror of
https://github.com/X11Libre/xserver.git
synced 2026-04-14 17:18:09 +00:00
The old code tried to use a screen pointer that was uninitialized and set to NULL. This caused it to segfault when this option was set. When this option was used with the modesetting driver, `glamor_egl_init` is called indirectly in the driver PreInit proc. `xf86ScrnToScreen(scrn)` then returns NULL. This patch moves setting the gl vendor later in the initialization process, when we already have a non-null pScreen. Minimal reproducer: ``` $ cat /etc/X11/xorg.conf.d/99-screen.conf Section "Screen" Identifier "Default" Option "GlxVendorLibrary" "Name" EndSection ``` Backtrace: ``` | #0 in abort () | #1 in OsAbort () at os/utils.c:1361 | #2 in AbortServer () at os/log.c:879 | #3 FatalError () at os/log.c:1017 | #4 in OsSigHandler () at os/osinit.c:156 | #5 OsSigHandler () at os/osinit.c:110 | #6 <signal handler called> | #7 in __pthread_kill_implementation () from /lib64/libc.so.6 | #8 in raise () from /lib64/libc.so.6 | #9 in abort () from /lib64/libc.so.6 | #10 in __assert_fail_base.cold () from /lib64/libc.so.6 | #11 in xf86ScrnToScreen () at hw/xfree86/common/xf86Helper.c:1734 | #12 in glamor_egl_init () at glamor/glamor_egl.c:1108 | #13 in try_enable_glamor () at hw/xfree86/drivers/modesetting/driver.c:984 | #14 PreInit () at hw/xfree86/drivers/modesetting/driver.c:1211 | #15 in InitOutput () at hw/xfree86/common/xf86Init.c:478 | #16 in dix_main () at dix/main.c:190 | #17 main () at dix/stubmain.c:34 ``` Fixes:a449bb4c5- glamor_egl: add support of GlxVendorLibrary option Signed-off-by: stefan11111 <stefan11111@shitposting.expert> Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2096> (cherry picked from commiteccee47185)