Skip to content
New issue

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

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

Already on GitHub? # to your account

cmd/go: panic during go list #70653

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
# for free to join this conversation on GitHub. Already have an account? # 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