Skip to content

runtime: stabilize Windows exit and GOROOT process cleanup - #2745

Merged
cpunion merged 8 commits into
xgo-dev:mainfrom
cpunion:codex/fix-windows-goroot-process-identity-20261006
Oct 6, 2026
Merged

cpunion merged 8 commits into
xgo-dev:mainfrom
cpunion:codex/fix-windows-goroot-process-identity-20261006

Conversation

@cpunion

@cpunion cpunion commented Oct 6, 2026 •

Copy link
Copy Markdown
Collaborator

Windows GOROOT tests could terminate an unrelated process after PID reuse, or hang during DLL cleanup after Go main had finished. Track creation-time identities and retain the root handle through cleanup; use immediate process termination for Go exit, with C streams flushed before normal main return. Fixes #2746.

Preserve Windows Path entries, reuse the initialized ARM64 MSYS2 installation, and scope macOS RSS queries to the complete target process group instead of unrelated processes. Avoid the Darwin GDB fork/exec startup hang by spawning the same inferior suspended and attaching native GDB before continuing. Debugger assertions, execution timeouts and RSS limits remain unchanged.

Validation: runner and entry-generation tests pass; 12 Windows C target builds pass. Native Windows acceptance passes 96 repeated original gcgort executions across Go 1.26/1.27, 12 additional build/run comparisons, 96 concurrent GC/exit subprocesses, GC/nogc runtime fixtures, and redirected C printf output. The RSS regression covers both the direct child and its descendant. The Darwin startup helper passes 24 complete GDB integrations across two Intel runners, following the LLDB acceptance suite.

Go exit skips DLL process-detach callbacks, following Microsoft's guidance for unknown thread state. os.Exit retains immediate Go exit behavior; C code needing buffered output at that call must flush it explicitly.

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: Windows goroot process-identity hardening

Solid, well-reasoned change. The processTree abstraction is consistent across the three build variants (newProcessTree/close/rss/kill with matching signatures), the Windows handle lifecycle is correct (handle closed on the error path, idempotent close(), defer tree.close() runs last), and the PID-reuse defense is sound: the root PID is pinned by an independently retained handle, descendant termination re-verifies creation time after OpenProcess, and windowsProcessTree rejects children older than the process now holding their recorded parent PID. Test coverage for these cases is strong.

A few non-blocking notes are inline. All are minor; nothing here blocks merge.

Comment thread test/goroot/proc_windows_test.go
Comment thread test/goroot/proc_windows_test.go Outdated
Comment thread test/goroot/proc_windows_test.go
@codecov

codecov Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

LLGo WebAssembly build benchmarks

02c52ea0ba60 | workflow run | long-term charts

WebAssembly output sizes
Example, profile and compiler Wasm module vs base Generated JS glue vs base
cprintf/j32-emscripten/LLGo 149240 B 0 B / +0.0% 88157 B 0 B / +0.0%
cprintf/j32-goos-js/LLGo 148511 B 0 B / +0.0% 72985 B 0 B / +0.0%
cprintf/j64-emscripten-memory64/LLGo 136707 B 0 B / +0.0% 91328 B 0 B / +0.0%
cprintf/w32-goos-wasip1/LLGo 154296 B 0 B / +0.0% 0 B 0 B / 0.0%
cprintf/w32-wasi/LLGo 154979 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-emscripten/LLGo 3056999 B 0 B / +0.0% 130373 B 0 B / +0.0%
fmtprintf/j32-goos-js/Go 2526852 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-goos-js/LLGo 3152979 B 0 B / +0.0% 100773 B 0 B / +0.0%
fmtprintf/j64-emscripten-memory64/LLGo 2819092 B 0 B / +0.0% 135853 B 0 B / +0.0%
fmtprintf/w32-goos-wasip1/Go 2500019 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-goos-wasip1/LLGo 2355448 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-wasi/LLGo 2352026 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-emscripten/LLGo 148582 B 0 B / +0.0% 88157 B 0 B / +0.0%
j32-goos-js/Go 1895533 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-goos-js/LLGo 148002 B 0 B / +0.0% 72985 B 0 B / +0.0%
j64-emscripten-memory64/LLGo 136047 B 0 B / +0.0% 91328 B 0 B / +0.0%
reflectcall/j32-emscripten/LLGo 1481123 B 0 B / +0.0% 104917 B 0 B / +0.0%
reflectcall/j32-goos-js/Go 2191221 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/j32-goos-js/LLGo 1530979 B 0 B / +0.0% 89743 B 0 B / +0.0%
reflectcall/j64-emscripten-memory64/LLGo 1373248 B 0 B / +0.0% 109492 B 0 B / +0.0%
reflectcall/w32-goos-wasip1/Go 2205707 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-goos-wasip1/LLGo 1283895 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-wasi/LLGo 1281420 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-goos-wasip1/Go 1909947 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-goos-wasip1/LLGo 153943 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-wasi/LLGo 154626 B 0 B / +0.0% 0 B 0 B / 0.0%
LLGo WebAssembly build measurements
Example and profile Build vs base
j32-emscripten 7.949 s +72.37 ms / +0.9% (worse)
j32-goos-js 7.579 s +274.8 ms / +3.8% (worse)
j64-emscripten-memory64 7.092 s +212.7 ms / +3.1% (worse)
reflectcall/w32-wasi 25.142 s -1.43 s / -5.4% (better)
w32-goos-wasip1 5.111 s +263.7 ms / +5.4% (worse)
w32-wasi 4.745 s -20.03 ms / -0.4% (better)

Compared with be669acd80cc measured in the same runner job.

@github-actions

github-actions Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

LLGo baseline benchmarks

02c52ea0ba60 | workflow run | long-term charts

Program measurements

Platform Workload File size vs base Text size vs base Build vs base Run vs base
Linux cprintf 8568 B 0 B / +0.0% 387 B 0 B / +0.0% 936.172 ms +6.729 ms / +0.7% (worse) 1.232 ms +6.908 us / +0.6% (worse)
Linux cprintf-lto 8408 B 0 B / +0.0% 368 B 0 B / +0.0% 947.896 ms -11.41 ms / -1.2% (better) 1.251 ms +28.07 us / +2.3% (worse)
Linux fmtprintf 4886280 B -8 B / -0.0001637% (better) 504761 B 0 B / +0.0% 7.233 s -92.72 ms / -1.3% (better) 3.092 ms -137.6 us / -4.3% (better)
Linux fmtprintf-lto 3616568 B 0 B / +0.0% 443075 B 0 B / +0.0% 16.144 s -131.2 ms / -0.8% (better) 2.911 ms +3.283 us / +0.1% (worse)
Linux println 675040 B 0 B / +0.0% 16855 B 0 B / +0.0% 955.098 ms +2.302 ms / +0.2% (worse) 1.647 ms -365 ns / -0.02216% (better)
Linux println-lto 190040 B 0 B / +0.0% 14273 B 0 B / +0.0% 1.284 s +36.78 ms / +2.9% (worse) 1.631 ms +27.7 us / +1.7% (worse)
macOS cprintf 50736 B 0 B / +0.0% 4409 B 0 B / +0.0% 1.854 s +341.8 ms / +22.6% (worse) 4.322 ms +14.63 us / +0.3% (worse)
macOS cprintf-lto 50496 B 0 B / +0.0% 161 B 0 B / +0.0% 1.473 s -157.7 ms / -9.7% (better) 5.641 ms -3.589 ms / -38.9% (better)
macOS fmtprintf 1774368 B 0 B / +0.0% 880529 B 0 B / +0.0% 6.842 s -2.002 s / -22.6% (better) 11.159 ms -7.425 ms / -40.0% (better)
macOS fmtprintf-lto 1361232 B 0 B / +0.0% 764957 B 0 B / +0.0% 12.929 s -5.273 s / -29.0% (better) 5.810 ms -2.401 ms / -29.2% (better)
macOS println 99344 B 0 B / +0.0% 24216 B 0 B / +0.0% 1.030 s -1.054 s / -50.6% (better) 4.309 ms -4.712 ms / -52.2% (better)
macOS println-lto 83664 B 0 B / +0.0% 21457 B 0 B / +0.0% 1.432 s -1.417 s / -49.7% (better) 7.015 ms -483.8 us / -6.5% (better)
Windows MinGW cprintf 651264 B -512 B / -0.1% (better) 4550 B 0 B / +0.0% 1.672 s -10.85 ms / -0.6% (better) 3.420 ms -664.8 us / -16.3% (better)
Windows MinGW cprintf-lto 44032 B +512 B / +1.2% (worse) 4502 B +16 B / +0.4% (worse) 1.724 s -24.36 ms / -1.4% (better) 3.425 ms -359.1 us / -9.5% (better)
Windows MinGW fmtprintf 5440512 B +512 B / +0.009412% (worse) 604470 B +16 B / +0.002647% (worse) 7.339 s -74.41 ms / -1.0% (better) 8.682 ms +231.2 us / +2.7% (worse)
Windows MinGW fmtprintf-lto 4144128 B 0 B / +0.0% 551590 B +16 B / +0.002901% (worse) 14.852 s -7.319 ms / -0.04926% (better) 7.973 ms -81.5 us / -1.0% (better)
Windows MinGW println 706048 B -1024 B / -0.1% (better) 25190 B 0 B / +0.0% 1.640 s -75.75 ms / -4.4% (better) 6.590 ms -1.724 ms / -20.7% (better)
Windows MinGW println-lto 208896 B 0 B / +0.0% 22070 B +16 B / +0.1% (worse) 1.939 s -60.74 ms / -3.0% (better) 6.416 ms -449.2 us / -6.5% (better)
Windows MinGW 386 cprintf 601600 B 0 B / +0.0% 5352 B +26 B / +0.5% (worse) 1.438 s +64.48 ms / +4.7% (worse) 4.517 ms +577.3 us / +14.7% (worse)
Windows MinGW 386 cprintf-lto 103424 B 0 B / +0.0% 5112 B +18 B / +0.4% (worse) 1.480 s +87.66 ms / +6.3% (worse) 4.535 ms +700.9 us / +18.3% (worse)
Windows MinGW 386 fmtprintf 4745728 B 0 B / +0.0% 472472 B -6 B / -0.00127% (better) 6.263 s +261.4 ms / +4.4% (worse) 9.243 ms +436.1 us / +5.0% (worse)
Windows MinGW 386 fmtprintf-lto 4148736 B 0 B / +0.0% 451132 B +18 B / +0.00399% (worse) 12.117 s -362.3 ms / -2.9% (better) 8.497 ms -977.9 us / -10.3% (better)
Windows MinGW 386 println 654336 B +1024 B / +0.2% (worse) 21500 B +10 B / +0.04653% (worse) 1.462 s +63.79 ms / +4.6% (worse) 8.072 ms +1.626 ms / +25.2% (worse)
Windows MinGW 386 println-lto 258560 B 0 B / +0.0% 19328 B +22 B / +0.1% (worse) 1.700 s +82.76 ms / +5.1% (worse) 7.262 ms -203.6 us / -2.7% (better)
Windows MinGW ARM64 cprintf 662016 B +1024 B / +0.2% (worse) 4436 B +28 B / +0.6% (worse) 1.980 s -72.56 ms / -3.5% (better) 5.960 ms -1.557 ms / -20.7% (better)
Windows MinGW ARM64 cprintf-lto 43520 B +512 B / +1.2% (worse) 4388 B +48 B / +1.1% (worse) 1.952 s -124.6 ms / -6.0% (better) 7.002 ms +228.2 us / +3.4% (worse)
Windows MinGW ARM64 fmtprintf 5348352 B -512 B / -0.009572% (better) 512664 B +28 B / +0.005462% (worse) 7.479 s -163 ms / -2.1% (better) 14.678 ms +287.1 us / +2.0% (worse)
Windows MinGW ARM64 fmtprintf-lto 4311552 B 0 B / +0.0% 478852 B +24 B / +0.005012% (worse) 14.360 s -271 ms / -1.9% (better) 13.591 ms -423.3 us / -3.0% (better)
Windows MinGW ARM64 println 713728 B 0 B / +0.0% 23912 B +28 B / +0.1% (worse) 1.988 s -45.04 ms / -2.2% (better) 12.025 ms +710 us / +6.3% (worse)
Windows MinGW ARM64 println-lto 215552 B 0 B / +0.0% 21272 B +40 B / +0.2% (worse) 2.280 s -60.57 ms / -2.6% (better) 13.582 ms +1.187 ms / +9.6% (worse)
Windows MSVC cprintf 895488 B +1536 B / +0.2% (worse) 66019 B +221 B / +0.3% (worse) 1.629 s +80.01 ms / +5.2% (worse) 3.471 ms +48 us / +1.4% (worse)
Windows MSVC cprintf-lto 291328 B +1536 B / +0.5% (worse) 65971 B +237 B / +0.4% (worse) 1.648 s +87.48 ms / +5.6% (worse) 3.377 ms +38.2 us / +1.1% (worse)
Windows MSVC fmtprintf 5742080 B +1024 B / +0.01784% (worse) 700214 B +192 B / +0.02743% (worse) 7.168 s +94.8 ms / +1.3% (worse) 9.155 ms +245.4 us / +2.8% (worse)
Windows MSVC fmtprintf-lto 4469248 B +2048 B / +0.04585% (worse) 651350 B +240 B / +0.03686% (worse) 14.004 s -413.6 ms / -2.9% (better) 8.917 ms -591.9 us / -6.2% (better)
Windows MSVC println 1018880 B +1024 B / +0.1% (worse) 121062 B +208 B / +0.2% (worse) 1.912 s +129.4 ms / +7.3% (worse) 7.701 ms +475.4 us / +6.6% (worse)
Windows MSVC println-lto 529920 B +1536 B / +0.3% (worse) 118598 B +208 B / +0.2% (worse) 1.915 s +123.7 ms / +6.9% (worse) 7.923 ms +621.4 us / +8.5% (worse)
Windows MSVC 386 cprintf 514048 B +512 B / +0.1% (worse) 3947 B +16 B / +0.4% (worse) 1.750 s +47.18 ms / +2.8% (worse) 5.228 ms -410.8 us / -7.3% (better)
Windows MSVC 386 cprintf-lto 44032 B 0 B / +0.0% 3901 B +48 B / +1.2% (worse) 1.541 s +61.6 ms / +4.2% (worse) 5.342 ms +196.4 us / +3.8% (worse)
Windows MSVC 386 fmtprintf 4480000 B 0 B / +0.0% 455900 B +32 B / +0.00702% (worse) 6.997 s +94.63 ms / +1.4% (worse) 11.325 ms -355 us / -3.0% (better)
Windows MSVC 386 fmtprintf-lto 3899904 B 0 B / +0.0% 426667 B +16 B / +0.00375% (worse) 13.610 s +87.06 ms / +0.6% (worse) 12.778 ms +1.157 ms / +10.0% (worse)
Windows MSVC 386 println 568320 B +512 B / +0.1% (worse) 20356 B +16 B / +0.1% (worse) 1.499 s +22.79 ms / +1.5% (worse) 9.287 ms -83.2 us / -0.9% (better)
Windows MSVC 386 println-lto 199168 B 0 B / +0.0% 18517 B +16 B / +0.1% (worse) 1.720 s -1.25 ms / -0.1% (better) 9.502 ms +245 us / +2.6% (worse)
Windows MSVC ARM64 cprintf 662528 B 0 B / +0.0% 4240 B +48 B / +1.1% (worse) 1.600 s +12.22 ms / +0.8% (worse) 6.757 ms +138 us / +2.1% (worse)
Windows MSVC ARM64 cprintf-lto 48640 B +1024 B / +2.2% (worse) 4140 B +56 B / +1.4% (worse) 1.597 s -30.76 ms / -1.9% (better) 6.376 ms -141.5 us / -2.2% (better)
Windows MSVC ARM64 fmtprintf 5345792 B +512 B / +0.009579% (worse) 512612 B +32 B / +0.006243% (worse) 6.635 s +101.8 ms / +1.6% (worse) 13.205 ms +217.5 us / +1.7% (worse)
Windows MSVC ARM64 fmtprintf-lto 4319232 B +1024 B / +0.02371% (worse) 479536 B +48 B / +0.01001% (worse) 12.792 s +143.9 ms / +1.1% (worse) 14.081 ms +264.3 us / +1.9% (worse)
Windows MSVC ARM64 println 716288 B +512 B / +0.1% (worse) 23956 B +48 B / +0.2% (worse) 1.582 s -14.31 ms / -0.9% (better) 11.418 ms +41.9 us / +0.4% (worse)
Windows MSVC ARM64 println-lto 220672 B 0 B / +0.0% 21444 B +64 B / +0.3% (worse) 1.804 s +32.2 ms / +1.8% (worse) 11.492 ms +519.6 us / +4.7% (worse)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.600 ns/op +0.06 ns/op / +0.4% (worse)
Linux BenchmarkMergeCompilerFlags 199.500 ns/op +6.9 ns/op / +3.6% (worse)
Linux BenchmarkMergeLinkerFlags 135.800 ns/op +10.9 ns/op / +8.7% (worse)
Linux BenchmarkChannelBuffered 54.820 ns/op +0.17 ns/op / +0.3% (worse)
Linux BenchmarkChannelHandoff 13755 ns/op +651 ns/op / +5.0% (worse)
Linux BenchmarkDefer 47.340 ns/op -0.03 ns/op / -0.1% (better)
Linux BenchmarkDirectCall 1.522 ns/op -0.001 ns/op / -0.1% (better)
Linux BenchmarkGlobalRead 1.555 ns/op -0.009 ns/op / -0.6% (better)
Linux BenchmarkGlobalWrite 7.798 ns/op +0.045 ns/op / +0.6% (worse)
Linux BenchmarkGoroutine 31295 ns/op +5618 ns/op / +21.9% (worse)
Linux BenchmarkInterfaceCall 6.243 ns/op -0.008 ns/op / -0.1% (better)
Linux BenchmarkRuntimeGetG 2.894 ns/op +0.029 ns/op / +1.0% (worse)
macOS BenchmarkLookupPCRandom 17.920 ns/op -4.21 ns/op / -19.0% (better)
macOS BenchmarkMergeCompilerFlags 173.300 ns/op +22.6 ns/op / +15.0% (worse)
macOS BenchmarkMergeLinkerFlags 111 ns/op +7.9 ns/op / +7.7% (worse)
macOS BenchmarkChannelBuffered 34.990 ns/op -3.59 ns/op / -9.3% (better)
macOS BenchmarkChannelHandoff 12852 ns/op +1186 ns/op / +10.2% (worse)
macOS BenchmarkDefer 45.160 ns/op -5.38 ns/op / -10.6% (better)
macOS BenchmarkDirectCall 1.349 ns/op +0.076 ns/op / +6.0% (worse)
macOS BenchmarkGlobalRead 1.245 ns/op -0.589 ns/op / -32.1% (better)
macOS BenchmarkGlobalWrite 1.663 ns/op -0.201 ns/op / -10.8% (better)
macOS BenchmarkGoroutine 64468 ns/op +25858 ns/op / +67.0% (worse)
macOS BenchmarkInterfaceCall 5.060 ns/op -0.67 ns/op / -11.7% (better)
macOS BenchmarkRuntimeGetG 2.660 ns/op -0.119 ns/op / -4.3% (better)
Windows MinGW BenchmarkLookupPCRandom 13.140 ns/op +0.13 ns/op / +1.0% (worse)
Windows MinGW BenchmarkMergeCompilerFlags 620.200 ns/op -11.6 ns/op / -1.8% (better)
Windows MinGW BenchmarkMergeLinkerFlags 554.500 ns/op -1.4 ns/op / -0.3% (better)
Windows MinGW BenchmarkChannelBuffered 30.760 ns/op +0.14 ns/op / +0.5% (worse)
Windows MinGW BenchmarkChannelHandoff 953.100 ns/op +81.7 ns/op / +9.4% (worse)
Windows MinGW BenchmarkDefer 57.820 ns/op +0.79 ns/op / +1.4% (worse)
Windows MinGW BenchmarkDirectCall 1.547 ns/op -0.001 ns/op / -0.1% (better)
Windows MinGW BenchmarkGlobalRead 1.551 ns/op +0.002 ns/op / +0.1% (worse)
Windows MinGW BenchmarkGlobalWrite 2.473 ns/op +0.003 ns/op / +0.1% (worse)
Windows MinGW BenchmarkGoroutine 93504 ns/op -1041 ns/op / -1.1% (better)
Windows MinGW BenchmarkInterfaceCall 7.780 ns/op -0.625 ns/op / -7.4% (better)
Windows MinGW BenchmarkRuntimeGetG 2.485 ns/op +0.311 ns/op / +14.3% (worse)
Windows MinGW 386 BenchmarkLookupPCRandom 21.580 ns/op +0.02 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkMergeCompilerFlags 586.300 ns/op -7.1 ns/op / -1.2% (better)
Windows MinGW 386 BenchmarkMergeLinkerFlags 521.200 ns/op -11.7 ns/op / -2.2% (better)
Windows MinGW 386 BenchmarkChannelBuffered 33.920 ns/op +0.04 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkChannelHandoff 779.900 ns/op -31.6 ns/op / -3.9% (better)
Windows MinGW 386 BenchmarkDefer 37.510 ns/op +0.06 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkDirectCall 1.358 ns/op +0.001 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkGlobalRead 1.629 ns/op +0.27 ns/op / +19.9% (worse)
Windows MinGW 386 BenchmarkGlobalWrite 6.985 ns/op +0.006 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkGoroutine 72325 ns/op +2827 ns/op / +4.1% (worse)
Windows MinGW 386 BenchmarkInterfaceCall 7.338 ns/op -0.005 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkRuntimeGetG 1.632 ns/op -0.003 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.170 ns/op -0.01 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 586.300 ns/op +5.5 ns/op / +0.9% (worse)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 552.500 ns/op +17.5 ns/op / +3.3% (worse)
Windows MinGW ARM64 BenchmarkChannelBuffered 38.760 ns/op -0.34 ns/op / -0.9% (better)
Windows MinGW ARM64 BenchmarkChannelHandoff 2138 ns/op -669 ns/op / -23.8% (better)
Windows MinGW ARM64 BenchmarkDefer 58.930 ns/op +1.08 ns/op / +1.9% (worse)
Windows MinGW ARM64 BenchmarkDirectCall 0.663 ns/op -0.0002 ns/op / -0.03015% (better)
Windows MinGW ARM64 BenchmarkGlobalRead 0.590 ns/op -0.0734 ns/op / -11.1% (better)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.737 ns/op +0.0003 ns/op / +0.04072% (worse)
Windows MinGW ARM64 BenchmarkGoroutine 63694 ns/op +264 ns/op / +0.4% (worse)
Windows MinGW ARM64 BenchmarkInterfaceCall 4.151 ns/op -0.096 ns/op / -2.3% (better)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.803 ns/op -0.007 ns/op / -0.4% (better)
Windows MSVC BenchmarkLookupPCRandom 13 ns/op +0.22 ns/op / +1.7% (worse)
Windows MSVC BenchmarkMergeCompilerFlags 623.500 ns/op -33.6 ns/op / -5.1% (better)
Windows MSVC BenchmarkMergeLinkerFlags 551 ns/op -25.4 ns/op / -4.4% (better)
Windows MSVC BenchmarkChannelBuffered 28.630 ns/op -3.67 ns/op / -11.4% (better)
Windows MSVC BenchmarkChannelHandoff 1073 ns/op +7 ns/op / +0.7% (worse)
Windows MSVC BenchmarkDefer 54.970 ns/op -1.53 ns/op / -2.7% (better)
Windows MSVC BenchmarkDirectCall 1.553 ns/op +0.004 ns/op / +0.3% (worse)
Windows MSVC BenchmarkGlobalRead 1.548 ns/op -0.076 ns/op / -4.7% (better)
Windows MSVC BenchmarkGlobalWrite 2.470 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC BenchmarkGoroutine 89138 ns/op -3395 ns/op / -3.7% (better)
Windows MSVC BenchmarkInterfaceCall 8.377 ns/op -0.327 ns/op / -3.8% (better)
Windows MSVC BenchmarkRuntimeGetG 2.186 ns/op -0.302 ns/op / -12.1% (better)
Windows MSVC 386 BenchmarkLookupPCRandom 27.800 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkMergeCompilerFlags 762.200 ns/op -13.4 ns/op / -1.7% (better)
Windows MSVC 386 BenchmarkMergeLinkerFlags 679 ns/op -29 ns/op / -4.1% (better)
Windows MSVC 386 BenchmarkChannelBuffered 44.160 ns/op +0.49 ns/op / +1.1% (worse)
Windows MSVC 386 BenchmarkChannelHandoff 883.700 ns/op +32.1 ns/op / +3.8% (worse)
Windows MSVC 386 BenchmarkDefer 49.940 ns/op -0.86 ns/op / -1.7% (better)
Windows MSVC 386 BenchmarkDirectCall 1.748 ns/op +0.002 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkGlobalRead 1.748 ns/op -0.003 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkGlobalWrite 8.994 ns/op +0.003 ns/op / +0.03337% (worse)
Windows MSVC 386 BenchmarkGoroutine 93313 ns/op -1153 ns/op / -1.2% (better)
Windows MSVC 386 BenchmarkInterfaceCall 9.452 ns/op -0.025 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkRuntimeGetG 2.101 ns/op +0.004 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.090 ns/op -0.06 ns/op / -0.5% (better)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 578.500 ns/op +3.7 ns/op / +0.6% (worse)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 539.400 ns/op +11.1 ns/op / +2.1% (worse)
Windows MSVC ARM64 BenchmarkChannelBuffered 38.630 ns/op +0.98 ns/op / +2.6% (worse)
Windows MSVC ARM64 BenchmarkChannelHandoff 3511 ns/op +27 ns/op / +0.8% (worse)
Windows MSVC ARM64 BenchmarkDefer 62.720 ns/op +1.9 ns/op / +3.1% (worse)
Windows MSVC ARM64 BenchmarkDirectCall 0.590 ns/op -0.0741 ns/op / -11.2% (better)
Windows MSVC ARM64 BenchmarkGlobalRead 0.590 ns/op -0.0737 ns/op / -11.1% (better)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.832 ns/op +0.036 ns/op / +0.9% (worse)
Windows MSVC ARM64 BenchmarkGoroutine 60170 ns/op +1875 ns/op / +3.2% (worse)
Windows MSVC ARM64 BenchmarkInterfaceCall 4.137 ns/op -0.095 ns/op / -2.2% (better)
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.808 ns/op +0.002 ns/op / +0.1% (worse)
Timer runtime benchmarks
Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 904.800 ns/op 0 ns/op / +0.0%
Linux AfterFuncZeroDelivery/LLGo 35801 ns/op -350 ns/op / -1.0% (better)
Linux CreateStop/Go 289.500 ns/op -1.7 ns/op / -0.6% (better)
Linux CreateStop/LLGo 1510 ns/op -403 ns/op / -21.1% (better)
Linux RearmStopped/Go 114.700 ns/op -1.1 ns/op / -0.9% (better)
Linux RearmStopped/LLGo 1528 ns/op +184 ns/op / +13.7% (worse)
Linux ResetActive/Go 67.400 ns/op -1.24 ns/op / -1.8% (better)
Linux ResetActive/LLGo 860.400 ns/op +57.3 ns/op / +7.1% (worse)
Linux ResetHeap1024/Go 67.240 ns/op +0.13 ns/op / +0.2% (worse)
Linux ResetHeap1024/LLGo 178.900 ns/op -2 ns/op / -1.1% (better)
macOS AfterFuncZeroDelivery/Go 605.300 ns/op -69.3 ns/op / -10.3% (better)
macOS AfterFuncZeroDelivery/LLGo 124238 ns/op +42214 ns/op / +51.5% (worse)
macOS CreateStop/Go 182.800 ns/op -112.3 ns/op / -38.1% (better)
macOS CreateStop/LLGo 915.200 ns/op -118.8 ns/op / -11.5% (better)
macOS RearmStopped/Go 69.600 ns/op -10.53 ns/op / -13.1% (better)
macOS RearmStopped/LLGo 425.200 ns/op +36.4 ns/op / +9.4% (worse)
macOS ResetActive/Go 51.870 ns/op -18.91 ns/op / -26.7% (better)
macOS ResetActive/LLGo 212 ns/op +26.4 ns/op / +14.2% (worse)
macOS ResetHeap1024/Go 54.230 ns/op +1.05 ns/op / +2.0% (worse)
macOS ResetHeap1024/LLGo 95.840 ns/op +3.36 ns/op / +3.6% (worse)
Windows MinGW AfterFuncZeroDelivery/Go 556.800 ns/op -5.8 ns/op / -1.0% (better)
Windows MinGW AfterFuncZeroDelivery/LLGo 181616 ns/op -2199 ns/op / -1.2% (better)
Windows MinGW CreateStop/Go 113.400 ns/op -4.1 ns/op / -3.5% (better)
Windows MinGW CreateStop/LLGo 438.600 ns/op +4.4 ns/op / +1.0% (worse)
Windows MinGW RearmStopped/Go 31.580 ns/op +0.02 ns/op / +0.1% (worse)
Windows MinGW RearmStopped/LLGo 277.600 ns/op -12.2 ns/op / -4.2% (better)
Windows MinGW ResetActive/Go 20.160 ns/op -0.04 ns/op / -0.2% (better)
Windows MinGW ResetActive/LLGo 170.300 ns/op +10.6 ns/op / +6.6% (worse)
Windows MinGW ResetHeap1024/Go 20.420 ns/op -0.04 ns/op / -0.2% (better)
Windows MinGW ResetHeap1024/LLGo 127 ns/op +0.2 ns/op / +0.2% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/Go 772.700 ns/op -17.7 ns/op / -2.2% (better)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 130067 ns/op +544 ns/op / +0.4% (worse)
Windows MinGW 386 CreateStop/Go 168.900 ns/op -5.6 ns/op / -3.2% (better)
Windows MinGW 386 CreateStop/LLGo 375.900 ns/op -7.7 ns/op / -2.0% (better)
Windows MinGW 386 RearmStopped/Go 56.980 ns/op +0.34 ns/op / +0.6% (worse)
Windows MinGW 386 RearmStopped/LLGo 280.500 ns/op +6.4 ns/op / +2.3% (worse)
Windows MinGW 386 ResetActive/Go 32.580 ns/op -0.07 ns/op / -0.2% (better)
Windows MinGW 386 ResetActive/LLGo 226.800 ns/op -653.7 ns/op / -74.2% (better)
Windows MinGW 386 ResetHeap1024/Go 32.890 ns/op -0.03 ns/op / -0.1% (better)
Windows MinGW 386 ResetHeap1024/LLGo 149.300 ns/op +0.4 ns/op / +0.3% (worse)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 681.100 ns/op +8.5 ns/op / +1.3% (worse)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 155659 ns/op -693 ns/op / -0.4% (better)
Windows MinGW ARM64 CreateStop/Go 197.500 ns/op -9.8 ns/op / -4.7% (better)
Windows MinGW ARM64 CreateStop/LLGo 356.700 ns/op -0.2 ns/op / -0.1% (better)
Windows MinGW ARM64 RearmStopped/Go 70.640 ns/op +0.01 ns/op / +0.01416% (worse)
Windows MinGW ARM64 RearmStopped/LLGo 252.300 ns/op +0.9 ns/op / +0.4% (worse)
Windows MinGW ARM64 ResetActive/Go 30.950 ns/op -0.04 ns/op / -0.1% (better)
Windows MinGW ARM64 ResetActive/LLGo 133 ns/op +3.5 ns/op / +2.7% (worse)
Windows MinGW ARM64 ResetHeap1024/Go 31.060 ns/op +0.01 ns/op / +0.03221% (worse)
Windows MinGW ARM64 ResetHeap1024/LLGo 126.300 ns/op -0.5 ns/op / -0.4% (better)
Windows MSVC AfterFuncZeroDelivery/Go 555.300 ns/op -1 ns/op / -0.2% (better)
Windows MSVC AfterFuncZeroDelivery/LLGo 177058 ns/op -859 ns/op / -0.5% (better)
Windows MSVC CreateStop/Go 116.200 ns/op +0.1 ns/op / +0.1% (worse)
Windows MSVC CreateStop/LLGo 427.500 ns/op -7.5 ns/op / -1.7% (better)
Windows MSVC RearmStopped/Go 31.560 ns/op +0.1 ns/op / +0.3% (worse)
Windows MSVC RearmStopped/LLGo 249.300 ns/op -13.7 ns/op / -5.2% (better)
Windows MSVC ResetActive/Go 20.150 ns/op -0.08 ns/op / -0.4% (better)
Windows MSVC ResetActive/LLGo 163.300 ns/op +1.3 ns/op / +0.8% (worse)
Windows MSVC ResetHeap1024/Go 20.540 ns/op -0.43 ns/op / -2.1% (better)
Windows MSVC ResetHeap1024/LLGo 127.700 ns/op -2.8 ns/op / -2.1% (better)
Windows MSVC 386 AfterFuncZeroDelivery/Go 980.800 ns/op -43.2 ns/op / -4.2% (better)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 169423 ns/op -555 ns/op / -0.3% (better)
Windows MSVC 386 CreateStop/Go 214.800 ns/op -2.8 ns/op / -1.3% (better)
Windows MSVC 386 CreateStop/LLGo 468.800 ns/op -28 ns/op / -5.6% (better)
Windows MSVC 386 RearmStopped/Go 73.090 ns/op -16.36 ns/op / -18.3% (better)
Windows MSVC 386 RearmStopped/LLGo 343.400 ns/op +2.2 ns/op / +0.6% (worse)
Windows MSVC 386 ResetActive/Go 42.040 ns/op -1.04 ns/op / -2.4% (better)
Windows MSVC 386 ResetActive/LLGo 266.700 ns/op -775.3 ns/op / -74.4% (better)
Windows MSVC 386 ResetHeap1024/Go 42.340 ns/op -0.97 ns/op / -2.2% (better)
Windows MSVC 386 ResetHeap1024/LLGo 182.100 ns/op -1.7 ns/op / -0.9% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 665.800 ns/op -2.8 ns/op / -0.4% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 144786 ns/op -19000 ns/op / -11.6% (better)
Windows MSVC ARM64 CreateStop/Go 200.700 ns/op -0.9 ns/op / -0.4% (better)
Windows MSVC ARM64 CreateStop/LLGo 380 ns/op +0.9 ns/op / +0.2% (worse)
Windows MSVC ARM64 RearmStopped/Go 70.550 ns/op -0.06 ns/op / -0.1% (better)
Windows MSVC ARM64 RearmStopped/LLGo 274.900 ns/op +8.4 ns/op / +3.2% (worse)
Windows MSVC ARM64 ResetActive/Go 31.110 ns/op +0.17 ns/op / +0.5% (worse)
Windows MSVC ARM64 ResetActive/LLGo 129.800 ns/op -7.6 ns/op / -5.5% (better)
Windows MSVC ARM64 ResetHeap1024/Go 31.170 ns/op +0.13 ns/op / +0.4% (worse)
Windows MSVC ARM64 ResetHeap1024/LLGo 136.300 ns/op -1.5 ns/op / -1.1% (better)

Compared with be669acd80cc measured in the same runner job.

@cpunion cpunion changed the title test/goroot: preserve Windows process identity during cleanup test/goroot: stabilize Windows process execution and cleanup Oct 6, 2026
@cpunion cpunion changed the title test/goroot: stabilize Windows process execution and cleanup runtime: stabilize Windows exit and GOROOT process cleanup Oct 6, 2026
@cpunion
cpunion merged commit 1866f43 into xgo-dev:main Oct 6, 2026
98 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

runtime: gcgort.go intermittently hangs on Windows MSVC amd64

1 participant