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
 | 
						|
}
 |