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

Reply via email to