mirror of
https://github.com/golang/go
synced 2024-09-15 22:20:06 +00:00
cmd/go/internal/modload: change Requirements.graph type to atomic.Pointer[cachedGraph]
This commit is contained in:
parent
ccf82d5323
commit
ed993dbe24
|
@ -73,8 +73,8 @@ type Requirements struct {
|
||||||
// nested module back into a parent module).
|
// nested module back into a parent module).
|
||||||
direct map[string]bool
|
direct map[string]bool
|
||||||
|
|
||||||
graphOnce sync.Once // guards writes to (but not reads from) graph
|
graphOnce sync.Once // guards writes to (but not reads from) graph
|
||||||
graph atomic.Value // cachedGraph
|
graph atomic.Pointer[cachedGraph]
|
||||||
}
|
}
|
||||||
|
|
||||||
// A cachedGraph is a non-nil *ModuleGraph, together with any error discovered
|
// A cachedGraph is a non-nil *ModuleGraph, together with any error discovered
|
||||||
|
@ -199,7 +199,7 @@ func (rs *Requirements) initVendor(vendorList []module.Version) {
|
||||||
mg.g.Require(vendorMod, vendorList)
|
mg.g.Require(vendorMod, vendorList)
|
||||||
}
|
}
|
||||||
|
|
||||||
rs.graph.Store(cachedGraph{mg, nil})
|
rs.graph.Store(&cachedGraph{mg, nil})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,9 +240,9 @@ func (rs *Requirements) hasRedundantRoot() bool {
|
||||||
func (rs *Requirements) Graph(ctx context.Context) (*ModuleGraph, error) {
|
func (rs *Requirements) Graph(ctx context.Context) (*ModuleGraph, error) {
|
||||||
rs.graphOnce.Do(func() {
|
rs.graphOnce.Do(func() {
|
||||||
mg, mgErr := readModGraph(ctx, rs.pruning, rs.rootModules)
|
mg, mgErr := readModGraph(ctx, rs.pruning, rs.rootModules)
|
||||||
rs.graph.Store(cachedGraph{mg, mgErr})
|
rs.graph.Store(&cachedGraph{mg, mgErr})
|
||||||
})
|
})
|
||||||
cached := rs.graph.Load().(cachedGraph)
|
cached := rs.graph.Load()
|
||||||
return cached.mg, cached.err
|
return cached.mg, cached.err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1837,7 +1837,7 @@ func (ld *loader) computePatternAll() (all []string) {
|
||||||
func (ld *loader) checkMultiplePaths() {
|
func (ld *loader) checkMultiplePaths() {
|
||||||
mods := ld.requirements.rootModules
|
mods := ld.requirements.rootModules
|
||||||
if cached := ld.requirements.graph.Load(); cached != nil {
|
if cached := ld.requirements.graph.Load(); cached != nil {
|
||||||
if mg := cached.(cachedGraph).mg; mg != nil {
|
if mg := cached.mg; mg != nil {
|
||||||
mods = mg.BuildList()
|
mods = mg.BuildList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue