Hello!
Verified your patch on "Lenovo V15 G4 IRU" ("fortunately" swrast because
Intel GPU is too new - so it is affected) - no SIGSEGV and
one_time_fini() is really called. Stacktrace confirms that
one_time_fini() is called on dlclose(3) - what we want.
uname -a: NetBSD nbsd11-apacer.example.com 11.0_BETA NetBSD 11.0_BETA
(GENERIC) #0: Thu Dec 18 19:57:53 UTC 2025
[email protected]:/usr/src/sys/arch/amd64/compile/GENERIC amd64
Below is GDB session used for verification:
=====================================
$ gdb glxinfo
Reading symbols from glxinfo...
Reading symbols from /usr/libdata/debug//usr/X11R7/bin/glxinfo.debug...
+break dlopen
Function "dlopen" not defined.
Breakpoint 1 (dlopen) pending.
+run
Starting program: /usr/X11R7/bin/glxinfo
Breakpoint 1.2, dlopen (name=name@entry=0x7bb584c6e331 "libGL.so.3",
mode=mode@entry=258) at /usr/src/libexec/ld.elf_so/rtld.c:1067
1067 {
+break one_time_fini
Function "one_time_fini" not defined.
Breakpoint 2 (one_time_fini) pending.
+c
Continuing.
Breakpoint 1.2, dlopen (name=name@entry=0x7f7fffdfb7a0
"/usr/X11R7/lib/modules/dri/swrast_dri.so", mode=mode@entry=258) at
/usr/src/libexec/ld.elf_so/rtld.c:1067
1067 {
+disable dlopen
Bad breakpoint number 'dlopen'
+c
Continuing.
[New LWP 4905 of process 2363]
(... omitted ...)
[New LWP 5341 of process 2363]
Thread 1 "" hit Breakpoint 1.2, dlopen (name=name@entry=0x7f7fffdfad40
"nss_compat.so.0", mode=mode@entry=513) at
/usr/src/libexec/ld.elf_so/rtld.c:1067
1067 {
+c
Continuing.
Thread 1 "" hit Breakpoint 1.2, dlopen (name=name@entry=0x7f7fffdfad40
"nss_nis.so.0", mode=mode@entry=513) at
/usr/src/libexec/ld.elf_so/rtld.c:1067
1067 {
+c
Continuing.
Thread 1 "" hit Breakpoint 1.2, dlopen (name=name@entry=0x7f7fffdfad40
"nss_files.so.0", mode=mode@entry=513) at
/usr/src/libexec/ld.elf_so/rtld.c:1067
1067 {
+c
Continuing.
Thread 1 "" hit Breakpoint 1.2, dlopen (name=name@entry=0x7f7fffdfad40
"nss_dns.so.0", mode=mode@entry=513) at
/usr/src/libexec/ld.elf_so/rtld.c:1067
1067 {
+c
Continuing.
[New LWP 4696 of process 2363]
[LWP 4944 of process 2363 exited]
(... omitted ...)
[LWP 4696 of process 2363 exited]
Thread 1 "" hit Breakpoint 2, one_time_fini () at
/usr/xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c:261
261 {
+bt
#0 one_time_fini () at
/usr/xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c:261
#1 0x00007f7ff7be0c3e in _rtld_call_initfini_function
(mask=0x7f7fffdfbde0, func=0x7bb57fb01ea3 <one_time_fini>) at
/usr/src/libexec/ld.elf_so/rtld.c:152
#2 _rtld_call_fini_function (cur_objgen=<optimized out>,
mask=<optimized out>, obj=<optimized out>) at
/usr/src/libexec/ld.elf_so/rtld.c:182
#3 _rtld_call_fini_function (obj=0x7bb584114000, mask=0x7f7fffdfbde0,
cur_objgen=3) at /usr/src/libexec/ld.elf_so/rtld.c:157
#4 0x00007f7ff7be0fb1 in _rtld_call_fini_functions (force=<optimized
out>, mask=<optimized out>) at /usr/src/libexec/ld.elf_so/rtld.c:213
#5 _rtld_unload_object (mask=mask@entry=0x7f7fffdfbde0,
root=root@entry=0x7bb584114000, do_fini_funcs=do_fini_funcs@entry=true)
at /usr/src/libexec/ld.elf_so/rtld.c:950
#6 0x00007f7ff7be1962 in _rtld_unload_object (do_fini_funcs=true,
root=0x7bb584114000, mask=0x7f7fffdfbde0) at
/usr/src/libexec/ld.elf_so/rtld.c:943
#7 dlclose (handle=0x7bb584114000) at
/usr/src/libexec/ld.elf_so/rtld.c:1044
#8 0x00007bb584c34e52 in driswDestroyScreen (base=0x7bb5841b1000) at
/usr/xsrc/external/mit/MesaLib/dist/src/glx/drisw_glx.c:714
#9 0x00007bb584c34146 in FreeScreenConfigs (priv=0x7bb5841c7000) at
/usr/xsrc/external/mit/MesaLib/dist/src/glx/glxext.c:259
#10 glx_display_free (priv=priv@entry=0x7bb5841c7000) at
/usr/xsrc/external/mit/MesaLib/dist/src/glx/glxext.c:282
#11 0x00007bb584c34277 in __glXCloseDisplay (dpy=0x7bb58422d000,
codes=<optimized out>) at
/usr/xsrc/external/mit/MesaLib/dist/src/glx/glxext.c:331
#12 0x00007bb584b4ded7 in XCloseDisplay (dpy=dpy@entry=0x7bb58422d000)
at /usr/xsrc/external/mit/libX11/dist/src/ClDisplay.c:66
#13 0x0000000000c6da50 in main (argc=<optimized out>, argv=<optimized
out>) at /usr/xsrc/external/mit/mesa-demos/dist/src/xdemos/glxinfo.c:1279
+c
Continuing.
warning: Temporarily disabling breakpoints for unloaded shared library
"/usr/X11R7/lib/modules/dri/swrast_dri.so"
[Inferior 1 (process 2363) exited normally]
+q
=====================================
Regards
--Henryk Paluch
On 12/22/25 23:52, RVP wrote:
On Mon, 22 Dec 2025, RVP wrote:
Actually, that is NetBSD-added code from way back:
https://github.com/NetBSD/xsrc/commit/
eabf4f72bd144ce7a1702762e8b5147de1958b79#diff-
a0dcc7bcb9c33bd013a4153c8cd470db8ca00250a5aa01a1d8350f8b8df5cac2
https://github.com/NetBSD/xsrc/commit/
d63b28c10f190a6db70dcf0ec4a2b5e182cd4a7c#diff-
a0dcc7bcb9c33bd013a4153c8cd470db8ca00250a5aa01a1d8350f8b8df5cac2
Can you try this:
```
diff -urN a/xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c b/
xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c
--- a/xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c
2022-05-09 01:27:38.000000000 +0000
+++ b/xsrc/external/mit/MesaLib/dist/src/mesa/main/context.c
2025-12-22 22:39:24.502696165 +0000
@@ -256,14 +256,11 @@
* Calls all the various one-time-fini functions in Mesa
*/
-static GLbitfield api_init_mask = 0x0;
static void __attribute__((__destructor__))
one_time_fini(void)
{
- if (api_init_mask) {
- glsl_type_singleton_decref();
- _mesa_locale_fini();
- }
+ glsl_type_singleton_decref();
+ _mesa_locale_fini();
}
/**
@@ -292,7 +289,9 @@
_mesa_ubyte_to_float_color_tab[i] = (float) i / 255.0F;
}
+#if 0
atexit(one_time_fini);
+#endif
#if defined(DEBUG)
if (MESA_VERBOSE != 0) {
```
-RVP