 52c9b88c25
			
		
	
	
		52c9b88c25
		
			
		
	
	
	
	
		
			
			The primary improvement is in early clearing of
analyzed package's TypeInfo, facts, etc for
whole program analyzers (`unused`). Clear it when it
becomes unused and GC collects them early. Initially this
clearing was performed for all analyzers except `unused`.
Update staticcheck from v0.0.1-2019.2.3 to v0.0.1-2020.1.4
Also in this commit:
  * speed up loading packages from export data (2.5s -> 2.1s for std)
    by not using mutex for export data since it was allowed in
    x/tools#07722704da13
  * make an order of execution of linters stable
  * update renameio and robustio
  * use robustio in caching
Relates: #987, #994, #995, #1011
		
	
			
		
			
				
	
	
		
			31 lines
		
	
	
		
			509 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			509 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package load
 | |
| 
 | |
| import (
 | |
| 	"sync"
 | |
| 
 | |
| 	"golang.org/x/tools/go/packages"
 | |
| )
 | |
| 
 | |
| type Guard struct {
 | |
| 	loadMutexes map[*packages.Package]*sync.Mutex
 | |
| 	mutex       sync.Mutex
 | |
| }
 | |
| 
 | |
| func NewGuard() *Guard {
 | |
| 	return &Guard{
 | |
| 		loadMutexes: map[*packages.Package]*sync.Mutex{},
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (g *Guard) AddMutexForPkg(pkg *packages.Package) {
 | |
| 	g.loadMutexes[pkg] = &sync.Mutex{}
 | |
| }
 | |
| 
 | |
| func (g *Guard) MutexForPkg(pkg *packages.Package) *sync.Mutex {
 | |
| 	return g.loadMutexes[pkg]
 | |
| }
 | |
| 
 | |
| func (g *Guard) Mutex() *sync.Mutex {
 | |
| 	return &g.mutex
 | |
| }
 |