Skip to content

runtime: reportZombies prints "unmarked" for every slot and dumps nothing under Green Tea GC #80799

Open

Description

@RaduBerinde

Go version

go version go1.26.5 darwin/arm64

Also reproduced on go1.27rc2 darwin/arm64. The relevant code is unchanged at master.

Output of go env in your module/workspace:

GOARCH='arm64'
GOOS='darwin'
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOVERSION='go1.26.5'
GOEXPERIMENT=''
CGO_ENABLED='1'
GOFLAGS=''
GODEBUG=''
GOTOOLCHAIN='auto'

(GOEXPERIMENT is empty, i.e. defaults — which on 1.26 means greenteagc is on.)

What did you do?

Ran the runtime's own zombie-object reproducer:

cd $GOROOT/src/runtime/testdata/testprog
go build -o /tmp/testprog .
GODEBUG=invalidptr=0 /tmp/testprog GCZombie

What did you see happen?

runtime: marked free object in span 0x127480968, elemsize=192 freeindex=0 (bad use of unsafe.Pointer or having race conditions? try -d=checkptr or -race)
0x3a1d01360000 alloc unmarked
0x3a1d013600c0 free  unmarked
0x3a1d01360180 alloc unmarked
0x3a1d01360240 free  unmarked
0x3a1d01360300 alloc unmarked
0x3a1d013603c0 free  unmarked
[... 42 slots in total: 21 "alloc unmarked", 21 "free unmarked", nothing else ...]

fatal error: found pointer to free object

Every slot is reported unmarked, no slot is tagged zombie, and the hexdumpWords call is therefore never reached — even though the sweeper threw precisely because it found a marked-but-free object in this span. The report contradicts the error it accompanies, and the object contents that make the failure diagnosable are not printed at all.

Same program, same toolchain, Green Tea disabled:

GOEXPERIMENT=nogreenteagc go build -o /tmp/testprog .
GODEBUG=invalidptr=0 /tmp/testprog GCZombie
runtime: marked free object in span 0x10263a5e0, elemsize=192 freeindex=0 (bad use of unsafe.Pointer or having race conditions? try -d=checkptr or -race)
0x23a2e5f90000 alloc marked
0x23a2e5f900c0 free  marked   zombie
                   7 6 5 4  3 2 1 0   f e d c  b a 9 8  0123456789abcdef
000023a2e5f900c0: 00000000 00000000  00000000 00000000  ................
000023a2e5f900d0: 00000000 00000000  00000000 00000000  ................
[...]

21 slots tagged zombie, each with its hex dump.

What did you expect to see?

The second output.

Analysis

(*sweepLocked).sweep merges the inline mark bits into gcmarkBits, clearing them, and then runs the zombie check against gcmarkBits:

	// Copy over and clear the inline mark bits if necessary.
	if gcUsesSpanInlineMarkBits(s.elemsize) {
		s.moveInlineMarks(s.gcmarkBits)
	}

	// Check for zombie objects.
	if s.freeindex < s.nelems {
		...
		if (*s.gcmarkBits.bytep(obj / 8)&^*s.allocBits.bytep(obj / 8))>>(obj%8) != 0 {
			s.reportZombies()
		}

moveInlineMarks ends with imb.init(s.spanclass, true), which resets the inline bits.

reportZombies then reads them back:

	mbits := s.markBitsForBase()

and under goexperiment.greenteagc that returns the inline bits whenever gcUsesSpanInlineMarkBits(s.elemsize):

func (s *mspan) markBitsForBase() markBits {
	if gcUsesSpanInlineMarkBits(s.elemsize) {
		return markBits{&s.inlineMarkBits().marks[0], uint8(1), 0}
	}
	return markBits{&s.gcmarkBits.x, uint8(1), 0}
}

So mbits reads back all zero, zombie := mbits.isMarked() && !alloc is never true, and nothing is dumped.

Scope. gcUsesSpanInlineMarkBits(size) is heapBitsInSpan(size) && size >= 16, so this affects spans whose elemsize is in [16, 512] on 64-bit — size classes 2..26 of 67, which covers most Go allocations. Larger objects and the 8-byte class still report correctly; running the same reproducer with const size = 600 (elemsize 640) on stock go1.26.5 prints the zombie tags and hex dumps as expected.

Affected releases. Go 1.25 with GOEXPERIMENT=greenteagc, Go 1.26 and later where it is on by default, and master.

TestGcZombieReporting does not catch this because it only asserts that the output contains found pointer to free object, which is printed by the throw rather than by the loop.

Suggested fix

reportZombies should consult the same bits the zombie check that called it consulted:

-	mbits := s.markBitsForBase()
+	// Not markBitsForBase: under Green Tea that returns the span's inline
+	// mark bits, which sweep has already drained into s.gcmarkBits and
+	// cleared by the time we get here.
+	mbits := markBits{&s.gcmarkBits.x, 1, 0}

The only other markBitsForBase in mgcsweep.go (in the trace / clobberfree / race / msan / asan loop) runs before moveInlineMarks and is correct as it stands.

Activity

  1. qiulaidongfeng commented on Aug 9, 2026

    @qiulaidongfeng
    Member

    Do you want to send a CL?
    https://go.dev/doc/contribute

  2. RaduBerinde commented on Aug 9, 2026

    @RaduBerinde
    ContributorAuthor

    I don't have very high confidence in the findings, I'd rather let someone who knows the code do it. BTW ideally we should backport to 1.26 too - I am trying to track a hard-to-reproduce failure and this logging would have helped.

  3. gopherbot commented on Aug 10, 2026

    @gopherbot
    Contributor

    Change https://go.dev/cl/812800 mentions this issue: runtime: report zombies using swept mark bits

  4. added this to the Go1.28 milestone on Aug 11, 2026
  5. added
    FixPendingIssues that have a fix which has not yet been reviewed or submitted.
    on Aug 11, 2026
  6. ignoramous commented on Aug 27, 2026

    @ignoramous

    Unsure if related, but we're seeing gc/memory sweep related crashes reported on Android (cgo via gomobile) on go1.26.7:

    traceback
    Crashed: Thread: SIGABRT  0x0000000000000000
    #00 pc 0x996818 libgojni.so (runtime.raise [sys_linux_arm64.s:158]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #01 pc 0x956838 libgojni.so (runtime.fatalthrow.func1 [signal_unix.go:1062]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #02 pc 0x9567b4 libgojni.so (runtime.fatalthrow [panic.go:1431]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #03 pc 0x98e0e4 libgojni.so (runtime.throw [panic.go:1229]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #04 pc 0x295244 libgojni.so (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #05 pc 0x98e0e4 libgojni.so (runtime.throw [panic.go:1229]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #06 pc 0x98e0e4 libgojni.so (runtime.throw [panic.go:1229]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #07 pc 0x9567cc libgojni.so (runtime.fatalthrow [panic.go:1449]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #08 pc 0x98e0e4 libgojni.so (runtime.throw [panic.go:1229]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #09 pc 0x944ad0 libgojni.so (runtime.(*mspan).reportZombies [mgcsweep.go:893]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #10 pc 0x95626c libgojni.so (runtime.gorecover.func1 [panic.go:1120]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #11 pc 0x25d5a6 libgojni.so (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #12 pc 0x943b3c libgojni.so (runtime.(*sweepLocked).sweep [mgcsweep.go:668]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #13 pc 0x25d5a6 libgojni.so (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #14 pc 0x943cfd libgojni.so (runtime.(*sweepLocked).sweep [types.go:420]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #15 pc 0x92e028 libgojni.so (runtime.(*mcentral).uncacheSpan [mcentral.go:237]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #16 pc 0x91e450 libgojni.so (runtime.mmap.func1 [cgo_mmap.go:40]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #17 pc 0x930308 libgojni.so (runtime.sysAllocOS [mem_linux.go:34]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #18 pc 0x92d8d4 libgojni.so (runtime.(*mcache).releaseAll [mcache.go:322]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #19 pc 0x92da08 libgojni.so (runtime.(*mcache).prepareForSweep [mcache.go:366]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #20 pc 0x9523ec libgojni.so (runtime.wbBufFlush1 [mwbbuf.go:270]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #21 pc 0x9668bc libgojni.so (runtime.acquirepNoTrace [proc.go:6287]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #22 pc 0x9667c8 libgojni.so (runtime.acquirep [proc.go:6261]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #23 pc 0x95ea30 libgojni.so (runtime.stopm [proc.go:1967]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #24 pc 0x95ea4c libgojni.so (runtime.stopm [proc.go:3009]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #25 pc 0x95ea04 libgojni.so (runtime.stopm [proc.go:3006]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #26 pc 0x96074c libgojni.so (runtime.findRunnable [proc.go:3796]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #27 pc 0x95fff0 libgojni.so (runtime.findRunnable [proc.go:3695]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #28 pc 0x961a6c libgojni.so (runtime.schedule [proc.go:4164]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #29 pc 0x93df7c libgojni.so (runtime.scanObjectSmall [mgcmark_greenteagc.go:1008]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #30 pc 0x93df68 libgojni.so (runtime.scanObjectSmall [mgcmark_greenteagc.go:1007]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #31 pc 0x9523ec libgojni.so (runtime.wbBufFlush1 [mwbbuf.go:270]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #32 pc 0x25134c libgojni.so (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #33 pc 0x9521d8 libgojni.so (runtime.wbBufFlush1 [mwbbuf.go:240]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #34 pc 0x961e14 libgojni.so (runtime.park_m [proc.go:4284]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #35 pc 0x993d6c libgojni.so (runtime.morestack [asm_arm64.s:507]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #36 pc 0x9458b0 libgojni.so (runtime.trygetfull [mgcwork.go:500]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #37 pc 0x945164 libgojni.so (runtime.(*gcWork).tryGetObj [mgcwork.go:270]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #38 pc 0x961d50 libgojni.so (runtime.park_m [proc.go:4275]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #39 pc 0x961c84 libgojni.so (runtime.parkunlock_c [lockrank_off.go:35]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #40 pc 0x961ef0 libgojni.so (runtime.park_m [proc.go:4304]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #41 pc 0x993bd0 libgojni.so (runtime.mcall [asm_arm64.s:339]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #42 pc 0x993b60 libgojni.so (runtime.mstart [asm_arm64.s:266]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #43 pc 0x10107ec libgojni.so (cproxy_error_Error [universe_android.c:42]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #44 pc 0x1010ebc libgojni.so (threadentry [gcc_linux_arm64.c:53]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #45 pc 0x993b4c libgojni.so (runtime.asminit [asm_arm64.s:256]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)
    #46 pc 0xebbb0 libc.so (BuildId: e18cca17d252ede5b01226139ce195f2)
    #47 pc 0x100ffc libc.so (BuildId: e18cca17d252ede5b01226139ce195f2)
    #48 pc 0x8b6a8 libc.so (BuildId: e18cca17d252ede5b01226139ce195f2)
    #49 pc 0xebaa4 libc.so (BuildId: e18cca17d252ede5b01226139ce195f2)
    #50 pc 0x1384f4 ld-android.so (BuildId: 4e2225e597d29e2ae50db2349a27bb78)
    #51 pc 0x1387f4 ld-android.so (BuildId: 4e2225e597d29e2ae50db2349a27bb78)
    #52 pc 0x1010e90 libgojni.so (_cgo_sys_thread_start [gcc_linux_arm64.c:40]) (BuildId: 29166068f4f6c7c19fe5f7d3ec0fbdbaf4dd15e5)

    (all threads).

  7. denisvmedia commented on Aug 30, 2026

    @denisvmedia

    Confirming this with a real failure and a before/after comparison. Note, I am not claiming a collector correctness bug here. This comment is only about the broken zombie report.

    Details

    I have been investigating a recurring

    fatal error: found pointer to free object
    

    on windows/amd64.

    With the normal Go runtime, every collected report looked like this:

    runtime: marked free object in span ..., elemsize=16 freeindex=335 (...)
    ...
    alloc unmarked
    free  unmarked
    ...
    fatal error: found pointer to free object
    

    There were 496 object rows: 335 alloc unmarked, 161 free unmarked, zero marked objects, zero zombies, and no hexdumps.

    This is especially confusing because the sweeper has already detected a marked free object, but reportZombies then reports every object as unmarked.

    I applied the suggested change to reportZombies only:

    - mbits := s.markBitsForBase()
    + mbits := markBits{&s.gcmarkBits.x, 1, 0}

    Nothing else changed: same collector, same commit, same test matrix.

    The next reproduction reported:

    0x170739ae5020 free  marked   zombie
                       7 6 5 4  3 2 1 0   f e d c  b a 9 8  0123456789abcdef
    0000170739ae5020: 00007ff6 4b67e0e0  00001707 39b7e1e0  ..gK.......9....
                      ^ <database/sql.(*Conn).closemuRUnlockCondReleaseConn-fm+0x0>
    

    Again there were 496 rows, but now the report found 95 zombies and printed their contents: 81 string headers, 8 funcvals, and 6 zeroed objects. Seven funcvals were symbolized as database/sql method values.

    That changed the failure from an almost empty runtime abort into something I could actually investigate.

    Standalone reproducer

    I also made a small standalone reproducer. It does not need a GOROOT checkout:

    type pair struct{ a, b *int }
    
    var anchor, revive *pair
    var hidden uintptr
    
    func main() {
    	all := make([]*pair, 400)
    	for i := range all {
    		all[i] = &pair{}
    	}
    
    	anchor = all[0]
    	hidden = uintptr(unsafe.Pointer(all[399]))
    	clear(all)
    
    	runtime.GC()
    	runtime.GC()
    
    	revive = (*pair)(pointerAt(hidden))
    	runtime.GC()
    
    	runtime.KeepAlive(anchor)
    	runtime.KeepAlive(revive)
    }

    I tested it with go1.27.0 on linux/amd64, windows/amd64, and darwin/arm64:

    default patched GOEXPERIMENT=nogreenteagc
    object rows 496 496 504
    marked rows 0 non-zero non-zero
    zombies found 0 1 1
    hexdump no yes yes

    Disabling Green Tea also makes the report work, but it changes the collector itself, as shown by the different object count. The patch fixes the diagnostic without changing the collector being investigated.

    Reproducer and tests for Linux, macOS, and Windows:

    https://github.com/denisvmedia/ptah-2365-repro/tree/d590cc753764517b4815429f91b5542b2a932889/zombiereport

    One related diagnostic gap

    There may also be a separate issue with GODEBUG=gccheckmark=1.

    For spans using inline mark bits, normal marking can go through tryDeferToSpanScan, so greyobject does not perform the span.isFree check. During the checkmark pass, greyobject is reached, but the useCheckmark branch calls setCheckmark instead of checking span.isFree.

    So for these size classes, gccheckmark=1 also does not catch this bad pointer earlier.

  8. RaduBerinde commented on Aug 30, 2026

    @RaduBerinde
    ContributorAuthor

    So for these size classes, gccheckmark=1 also does not catch this bad pointer earlier.

    Nice find - I tried a lot to reproduce my original problem with gccheckmark=1 with no luck. We should definitely fix this too.

  9. RaduBerinde commented on Sep 6, 2026

    @RaduBerinde
    ContributorAuthor

    Not sure if related, but I hit this panic:

    fatal error: index out of range
    
    runtime stack:
    runtime.throw({0x7ff774f82ac5?, 0x7ff774c50201?})
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/panic.go:1229 +0x4d fp=0x215dbff778 sp=0x215dbff748 pc=0x7ff773fbcc6d
    runtime.panicCheck1(0x7ff77488db4f?, {0x7ff774f82ac5, 0x12})
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/panic.go:59 +0x94 fp=0x215dbff798 sp=0x215dbff778 pc=0x7ff773f81c74
    runtime.panicBounds64(0x7ff773f65eb4, 0x215dbff808)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/panic.go:218 +0x7e fp=0x215dbff7f8 sp=0x215dbff798 pc=0x7ff773f81d7e
    runtime.panicBounds()
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/asm_amd64.s:2129 +0x68 fp=0x215dbff898 sp=0x215dbff7f8 pc=0x7ff773fc50e8
    runtime.tryDeferToSpanScan(0x921987b8068?, 0x92198809260?)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/mgcmark_greenteagc.go:283 +0x294 fp=0x215dbff8c8 sp=0x215dbff898 pc=0x7ff773f65eb4
    runtime.scanObjectSmall(0x0?, 0x921987b4a00, 0x0?, 0x92198809260)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/mgcmark_greenteagc.go:1007 +0x165 fp=0x215dbff930 sp=0x215dbff8c8 pc=0x7ff773f67205
    runtime.scanSpan(0x92198809260?, 0x92198809260?)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/mgcmark_greenteagc.go:869 +0xe6 fp=0x215dbffa38 sp=0x215dbff930 pc=0x7ff773f66c06
    runtime.gcDrainN(0x92198809260, 0x388bb5)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/mgcmark.go:1450 +0x214 fp=0x215dbffa78 sp=0x215dbffa38 pc=0x7ff773f64a34
    runtime.gcAssistAlloc1(0x921988ae960, 0x388bb5)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/mgcmark.go:745 +0xea fp=0x215dbffac8 sp=0x215dbffa78 pc=0x7ff773f633ea
    runtime.gcAssistAlloc.func2()
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/mgcmark.go:639 +0x1b fp=0x215dbffae8 sp=0x215dbffac8 pc=0x7ff773f6327b
    runtime.systemstack(0x92198888000)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/asm_amd64.s:562 +0x49 fp=0x215dbffaf8 sp=0x215dbffae8 pc=0x7ff773fc3029
    
    goroutine 51726 gp=0x921988ae960 m=5 mp=0x92198880008 [GC assist marking]:
    runtime.systemstack_switch()
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/asm_amd64.s:516 +0x8 fp=0x92198801190 sp=0x92198801180 pc=0x7ff773fc2fc8
    runtime.gcAssistAlloc(0x921988ae960)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/mgcmark.go:638 +0x2a5 fp=0x92198801220 sp=0x92198801190 pc=0x7ff773f62f25
    runtime.deductAssistCredit(0x92198801460?)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/malloc.go:1861 +0x46 fp=0x92198801240 sp=0x92198801220 pc=0x7ff773f542e6
    runtime.mallocgc(0x100000, 0x7ff774d77fa0, 0x1)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/malloc.go:1113 +0x67 fp=0x92198801270 sp=0x92198801240 pc=0x7ff773fba367
    runtime.makeslice(0x82?, 0x7ff774d78160?, 0x7ff774d78160?)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/slice.go:117 +0x49 fp=0x92198801298 sp=0x92198801270 pc=0x7ff773fbed89
    github.com/cockroachdb/crlib/testutils/leaktest.getStacks()
    	C:/Users/runneradmin/go/pkg/mod/github.com/cockroachdb/crlib@v0.0.0-20251122031428-fe658a2dbda1/testutils/leaktest/leaktest.go:185 +0x30 fp=0x921988012d8 sp=0x92198801298 pc=0x7ff77467b4d0
    github.com/cockroachdb/crlib/testutils/leaktest.interestingGoroutines()
    	C:/Users/runneradmin/go/pkg/mod/github.com/cockroachdb/crlib@v0.0.0-20251122031428-fe658a2dbda1/testutils/leaktest/leaktest.go:24 +0x1f fp=0x92198801380 sp=0x921988012d8 pc=0x7ff77467a57f
    github.com/cockroachdb/crlib/testutils/leaktest.diffGoroutines(0x921993a9080)
    	C:/Users/runneradmin/go/pkg/mod/github.com/cockroachdb/crlib@v0.0.0-20251122031428-fe658a2dbda1/testutils/leaktest/leaktest.go:162 +0x2a fp=0x921988014f8 sp=0x92198801380 pc=0x7ff77467b04a
    github.com/cockroachdb/crlib/testutils/leaktest.AfterTest.func2()
    	C:/Users/runneradmin/go/pkg/mod/github.com/cockroachdb/crlib@v0.0.0-20251122031428-fe658a2dbda1/testutils/leaktest/leaktest.go:145 +0x152 fp=0x921988015a8 sp=0x921988014f8 pc=0x7ff77467ad72
    github.com/cockroachdb/pebble.TestTombstoneDensityCompactionMoveOptimization(0x921988bd800)
    	D:/a/pebble-private/pebble-private/compaction_test.go:4685 +0x160f fp=0x92198801f70 sp=0x921988015a8 pc=0x7ff77488db4f
    testing.tRunner(0x921988bd800, 0x7ff774fd6b88)
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/testing/testing.go:2036 +0xc3 fp=0x92198801fc0 sp=0x92198801f70 pc=0x7ff774097c23
    testing.(*T).Run.gowrap1()
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/testing/testing.go:2101 +0x1b fp=0x92198801fe0 sp=0x92198801fc0 pc=0x7ff774098d5b
    runtime.goexit({})
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/runtime/asm_amd64.s:1771 +0x1 fp=0x92198801fe8 sp=0x92198801fe0 pc=0x7ff773fc4c81
    created by testing.(*T).Run in goroutine 1
    	C:/hostedtoolcache/windows/go/1.26.7/x64/src/testing/testing.go:2101 +0x4a9
    
  10. RaduBerinde commented on Sep 17, 2026

    @RaduBerinde
    ContributorAuthor

    Would be great to get a fix here. Some tests keep hitting a failure like this once in a blue moon and the missing debug data would help (no luck reproducing it or I would try with a modified runtime).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    FixPendingIssues that have a fix which has not yet been reviewed or submitted.compiler/runtimeIssues related to the Go compiler and/or runtime.

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions