Isaev Denis 52c9b88c25
reduce mem. usage of unused and update staticcheck (#1063)
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
2020-05-03 15:20:17 +03:00

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
}