impi icon indicating copy to clipboard operation
impi copied to clipboard

Deadlock when using invalid local prefix path

Open nick-jones opened this issue 5 years ago • 1 comments

I noticed whilst testing changes over the weekend that a deadlock can occur if a local prefix is supplied that doesn't match any import (unsure what the exact reason is at this stage). This occurs on v0.0.1 so it's not linked to any recent changes. I'm happy to take a look at some point, just raising for visibility at the moment.

$ /Users/nicholas/Dev/impi/cmd/impi/impi --local github.com/invalid/prefix --scheme stdThirdPartyLocal --ignore-generated=true ./...
fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan send]:
github.com/pavius/impi.(*Impi).addFilePathToFilePathsChan(0xc00004a3c0, 0xc0004106c0, 0x25)
	/Users/nicholas/Dev/impi/impi.go:254 +0x1df
github.com/pavius/impi.(*Impi).populatePathsChan(0xc00004a3c0, 0x7ffeefbffa8d, 0x5, 0x0, 0x135a008)
	/Users/nicholas/Dev/impi/impi.go:144 +0x29b
github.com/pavius/impi.(*Impi).Verify(0xc00004a3c0, 0x7ffeefbffa8d, 0x5, 0xc00004a400, 0x11d1020, 0x1306c10, 0x15, 0xc0000403e0)
	/Users/nicholas/Dev/impi/impi.go:105 +0x162
main.run(0x17, 0xc000097f58)
	/Users/nicholas/Dev/impi/cmd/impi/main.go:70 +0x405
main.main()
	/Users/nicholas/Dev/impi/cmd/impi/main.go:92 +0x41

goroutine 4 [chan send]:
github.com/pavius/impi.(*Impi).verifyPathsFromChan(0xc00004a3c0, 0x118a660, 0x60)
	/Users/nicholas/Dev/impi/impi.go:215 +0x18b
created by github.com/pavius/impi.(*Impi).createWorkers
	/Users/nicholas/Dev/impi/impi.go:184 +0x48

goroutine 5 [chan send]:
github.com/pavius/impi.(*Impi).verifyPathsFromChan(0xc00004a3c0, 0x118a660, 0x60)
	/Users/nicholas/Dev/impi/impi.go:215 +0x18b
created by github.com/pavius/impi.(*Impi).createWorkers
	/Users/nicholas/Dev/impi/impi.go:184 +0x48

goroutine 6 [chan send]:
github.com/pavius/impi.(*Impi).verifyPathsFromChan(0xc00004a3c0, 0x118a660, 0x60)
	/Users/nicholas/Dev/impi/impi.go:215 +0x18b
created by github.com/pavius/impi.(*Impi).createWorkers
	/Users/nicholas/Dev/impi/impi.go:184 +0x48

goroutine 7 [chan send]:
github.com/pavius/impi.(*Impi).verifyPathsFromChan(0xc00004a3c0, 0x118a660, 0x60)
	/Users/nicholas/Dev/impi/impi.go:215 +0x18b
created by github.com/pavius/impi.(*Impi).createWorkers
	/Users/nicholas/Dev/impi/impi.go:184 +0x48

nick-jones avatar May 26 '20 17:05 nick-jones

From a quick look, I believe the cause is because resultChan fills up to capacity before waitWorkerCompletion is invoked (I'm running this in a large repo)

nick-jones avatar May 26 '20 20:05 nick-jones