]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/modload: use atomic.Pointer for Requirements.graph
authorAbirdcfly <fp544037857@gmail.com>
Wed, 7 Sep 2022 04:25:08 +0000 (04:25 +0000)
committerGopher Robot <gobot@golang.org>
Fri, 9 Sep 2022 15:30:04 +0000 (15:30 +0000)
Change-Id: Ie543e1b1df667cfaf3aafa4be727881461ee8b7d
GitHub-Last-Rev: ed993dbe2445c4797303138b62f6c7e26050dcd4
GitHub-Pull-Request: golang/go#54888
Reviewed-on: https://go-review.googlesource.com/c/go/+/428716
Auto-Submit: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/cmd/go/internal/modload/buildlist.go
src/cmd/go/internal/modload/load.go

index cde4953afa225047c4d0e685eb64044b38b98fbf..aa59611e8193acebdaf6aa83d75035dca5ff0be7 100644 (file)
@@ -73,8 +73,8 @@ type Requirements struct {
        // nested module back into a parent module).
        direct map[string]bool
 
-       graphOnce sync.Once    // guards writes to (but not reads from) graph
-       graph     atomic.Value // cachedGraph
+       graphOnce sync.Once // guards writes to (but not reads from) graph
+       graph     atomic.Pointer[cachedGraph]
 }
 
 // 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)
                }
 
-               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) {
        rs.graphOnce.Do(func() {
                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
 }
 
index 69b0c30978da0e3252330184b92689be349fcec3..060d0cb21a01dca0b638cf3e40a58fd294daf518 100644 (file)
@@ -1837,7 +1837,7 @@ func (ld *loader) computePatternAll() (all []string) {
 func (ld *loader) checkMultiplePaths() {
        mods := ld.requirements.rootModules
        if cached := ld.requirements.graph.Load(); cached != nil {
-               if mg := cached.(cachedGraph).mg; mg != nil {
+               if mg := cached.mg; mg != nil {
                        mods = mg.BuildList()
                }
        }