Skip to content

cmd/go: panic during go list #70653

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
rsc opened this issue Dec 3, 2024 · 3 comments
Closed

cmd/go: panic during go list #70653

rsc opened this issue Dec 3, 2024 · 3 comments
Labels
NeedsFix The path to resolution is known, but the work has not been done. release-blocker
Milestone

Comments

@rsc
Copy link
Contributor

rsc commented Dec 3, 2024

I got a crash from an ordinary go command the other day, but I wrote it off as my client being out of date and rebuilt. Today, however, I just got what I think is the same crash, reported by gopls's use of packages.Load.

Looks like CL 613095 did this.

/cc @matloob @samthanawalla

2024/12/03 08:03:23 LSP 4: packages.Load error: err: exit status 2: stderr: 
go: downloading github.com/microsoft/go-mssqldb v1.4.0 
go: downloading github.com/DATA-DOG/go-sqlmock v1.5.0 
go: downloading github.com/cenkalti/backoff/v4 v4.2.1 
panic: runtime error: invalid memory address or nil pointer dereference 
[signal SIGSEGV: segmentation violation code=0x2 addr=0x18 pc=0x100fa3b00]  
goroutine 8 [running]: 
cmd/go/internal/cache.(*DiskCache).markUsed(0x1400000d4e8, {0x14000720150, 0x68}) 
	/Users/rsc/go/src/cmd/go/internal/cache/cache.go:366 +0xf0
 cmd/go/internal/cache.(*DiskCache).OutputFile(0x1400000d4e8, {0xe6, 0xbe, 0x9, 0xf6, 0xcf, 0x4c, 0xd9, 0xa6, 0x5, ...}) 
	/Users/rsc/go/src/cmd/go/internal/cache/cache.go:317 +0x58
 cmd/go/internal/cache.GetMmap({0x1015a2a80, 0x1400000d4e8}, {0xb5, 0x2, 0xc2, 0x5a, 0xc2, 0x78, 0x53, 0xa0, ...}) 
	/Users/rsc/go/src/cmd/go/internal/cache/cache.go:304 +0xc8
 cmd/go/internal/modindex.openIndexModule.func1() 
	/Users/rsc/go/src/cmd/go/internal/modindex/read.go:186 +0x9c
 cmd/internal/par.(*ErrCache[...]).Do.func1() 
	/Users/rsc/go/src/cmd/internal/par/work.go:119 +0x24
 cmd/internal/par.(*Cache[...]).Do(0x1015a6d80, {0x14000716200, 0x32}, 0x140004d3820) 
	/Users/rsc/go/src/cmd/internal/par/work.go:160 +0x130
 cmd/internal/par.(*ErrCache[...]).Do(0x32?, {0x14000716200?, 0x0?}, 0x140004d3898?) 
	/Users/rsc/go/src/cmd/internal/par/work.go:118 +0x40
 cmd/go/internal/modindex.openIndexModule({0x14000716200?, 0x32?}, 0xd8?) 
	/Users/rsc/go/src/cmd/go/internal/modindex/read.go:180 +0x58
 cmd/go/internal/modindex.GetModule({0x14000716200, 0x32}) 
	/Users/rsc/go/src/cmd/go/internal/modindex/read.go:171 +0x138
 cmd/go/internal/modindex.GetPackage({0x14000716200, 0x32}, {0x140002aa000, 0x36}) 
	/Users/rsc/go/src/cmd/go/internal/modindex/read.go:136 +0x2c
 cmd/go/internal/modload.dirInModule.func2() 
	/Users/rsc/go/src/cmd/go/internal/modload/import.go:723 +0x34
 cmd/internal/par.(*ErrCache[...]).Do.func1() 
	/Users/rsc/go/src/cmd/internal/par/work.go:119 +0x24
 cmd/internal/par.(*Cache[...]).Do(0x1015a6900, {0x140002aa000, 0x36}, 0x140004d3a30) 
	/Users/rsc/go/src/cmd/internal/par/work.go:160 +0x130
 cmd/internal/par.(*ErrCache[...]).Do(0x1b?, {0x140002aa000?, 0x1?}, 0x14000102b08?) 
	/Users/rsc/go/src/cmd/internal/par/work.go:118 +0x40
 cmd/go/internal/modload.dirInModule({0x1400032da9a, 0x1c}, {0x1400032da9a?, 0x18}, {0x14000716200, 0x32}, 0x0) 
	/Users/rsc/go/src/cmd/go/internal/modload/import.go:719 +0x1cc
 cmd/go/internal/modload.importFromModules({0x1015a2160, 0x1019b50a0}, {0x1400032da9a, 0x1c}, 0x140001463c0, 0x0, 0x0) 
	/Users/rsc/go/src/cmd/go/internal/modload/import.go:430 +0xb14
 cmd/go/internal/modload.(*loader).load(0x140001ca000, {0x1015a2160, 0x1019b50a0}, 0x140003af450) 
	/Users/rsc/go/src/cmd/go/internal/modload/load.go:1854 +0x90
 cmd/go/internal/modload.(*loader).pkg.func1.1() 
	/Users/rsc/go/src/cmd/go/internal/modload/load.go:1667 +0x2c
 cmd/internal/par.(*Queue).Add.func1() 
	/Users/rsc/go/src/cmd/internal/par/queue.go:58 +0x60
 created by cmd/internal/par.(*Queue).Add in goroutine 1 
	/Users/rsc/go/src/cmd/internal/par/queue.go:56 +0x194
 
@rsc rsc added NeedsFix The path to resolution is known, but the work has not been done. release-blocker labels Dec 3, 2024
@rsc rsc added this to the Go1.24 milestone Dec 3, 2024
@rsc
Copy link
Contributor Author

rsc commented Dec 3, 2024

This seems to fix my computer so I can use it again, but I am going to leave it to @matloob to write a test.

func (c *DiskCache) markUsed(file string) (isExecutable bool) {
	info, err := os.Stat(file)
	if err != nil {
		return false
	}
	if now := c.now(); now.Sub(info.ModTime()) >= mtimeInterval {
		os.Chtimes(file, now, now)
	}
	return info.IsDir()
}

@matloob
Copy link
Contributor

matloob commented Dec 3, 2024

This is a duplicate of #70600. I'll send the fix with a test today.

@matloob matloob closed this as not planned Won't fix, can't repro, duplicate, stale Dec 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
NeedsFix The path to resolution is known, but the work has not been done. release-blocker
Projects
None yet
Development

No branches or pull requests

3 participants