range var pool copies lock: sync/atomic.Pointer[github.com/vdaas/vald/internal/net/grpc/pool.poolConn] contains sync/atomic.noCopy
232 p.pmu.RLock()
233 defer p.pmu.RUnlock()
234 var cnt int
235 for idx, pool := range p.pool {236 select {
237 case <-ctx.Done():
238 return ctx.Err()
call of checkFunc copies lock value: github.com/vdaas/vald/internal/info.want contains github.com/vdaas/vald/internal/info.info contains sync.Once contains sync.Mutex
1654 rtFuncForPC: test.fields.rtFuncForPC,
1655 }
1656 i.prepare()
1657 if err := checkFunc(*i, test.want); err != nil {1658 tt.Errorf("error = %v", err)
1659 }
1660 })
call of checkFunc copies lock value: github.com/vdaas/vald/internal/info.info contains sync.Once contains sync.Mutex
1654 rtFuncForPC: test.fields.rtFuncForPC,
1655 }
1656 i.prepare()
1657 if err := checkFunc(*i, test.want); err != nil {1658 tt.Errorf("error = %v", err)
1659 }
1660 })
assignment copies lock value to test: github.com/vdaas/vald/internal/errgroup.test contains github.com/vdaas/vald/internal/errgroup.fields contains sync/atomic.Bool contains sync/atomic.noCopy
558 }
559
560 for _, tc := range tests {
561 test := tc562 t.Run(test.name, func(tt *testing.T) {
563 if test.afterFunc != nil {
564 defer test.afterFunc(tt, test.args)
range var tc copies lock: github.com/vdaas/vald/internal/errgroup.test contains github.com/vdaas/vald/internal/errgroup.fields contains sync/atomic.Bool contains sync/atomic.noCopy
557 }(),
558 }
559
560 for _, tc := range tests {561 test := tc
562 t.Run(test.name, func(tt *testing.T) {
563 if test.afterFunc != nil {
literal copies lock value from test.fields.enableLimitation: sync/atomic.Bool contains sync/atomic.noCopy
423 }
424 g := &group{
425 limitation: test.fields.limitation,
426 enableLimitation: test.fields.enableLimitation,427 }
428
429 g.Limitation(test.args.limit)
assignment copies lock value to test: github.com/vdaas/vald/internal/errgroup.test contains github.com/vdaas/vald/internal/errgroup.fields contains sync/atomic.Bool contains sync/atomic.noCopy
772 }
773
774 for _, tc := range tests {
775 test := tc776 t.Run(test.name, func(tt *testing.T) {
777 if test.afterFunc != nil {
778 defer test.afterFunc()
literal copies lock value from test.fields.enableLimitation: sync/atomic.Bool contains sync/atomic.noCopy
784 g := &group{
785 limitation: test.fields.limitation,
786 errs: test.fields.errs,
787 enableLimitation: test.fields.enableLimitation,788 }
789
790 if test.beforeFunc != nil {
call of reflect.DeepEqual copies lock value: sync/atomic.Bool contains sync/atomic.noCopy
55 }
56 defaultCheckFunc := func(w want, got Group, got1 context.Context) error {
57 if got, want := got.(*group), w.want.(*group); !reflect.DeepEqual(got.emap, want.emap) &&
58 !reflect.DeepEqual(got.enableLimitation, want.enableLimitation) && 59 got.cancel != nil {
60 return errors.Errorf("got: \"%#v\",\n\t\t\t\twant: \"%#v\"", got, w.want)
61 }
assignment copies lock value to test: github.com/vdaas/vald/internal/errgroup.test contains github.com/vdaas/vald/internal/errgroup.fields contains sync/atomic.Bool contains sync/atomic.noCopy
409 }
410
411 for _, tc := range tests {
412 test := tc413 t.Run(test.name, func(tt *testing.T) {
414 if test.beforeFunc != nil {
415 test.beforeFunc(test.args)
range var tc copies lock: github.com/vdaas/vald/internal/errgroup.test contains github.com/vdaas/vald/internal/errgroup.fields contains sync/atomic.Bool contains sync/atomic.noCopy
408 },
409 }
410
411 for _, tc := range tests {412 test := tc
413 t.Run(test.name, func(tt *testing.T) {
414 if test.beforeFunc != nil {
return copies lock value: sync/atomic.Bool contains sync/atomic.noCopy
401 enableLimitation: func() atomic.Bool {
402 var el atomic.Bool
403 el.Store(true)
404 return el405 }(),
406 },
407 },
range var tc copies lock: github.com/vdaas/vald/internal/errgroup.test contains github.com/vdaas/vald/internal/errgroup.fields contains sync/atomic.Bool contains sync/atomic.noCopy
771 },
772 }
773
774 for _, tc := range tests {775 test := tc
776 t.Run(test.name, func(tt *testing.T) {
777 if test.afterFunc != nil {
call of reflect.DeepEqual copies lock value: sync/atomic.Bool contains sync/atomic.noCopy
363 }
364 defaultCheckFunc := func(w want, g Group) error {
365 got, want := g.(*group), w.want.(*group)
366 if !reflect.DeepEqual(got.enableLimitation, want.enableLimitation) {367 return errors.Errorf("got: \"%#v\",\n\t\t\t\twant: \"%#v\"", got, w.want)
368 }
369 if got.limitation != nil && want.limitation != nil {
call of reflect.DeepEqual copies lock value: sync/atomic.Bool contains sync/atomic.noCopy
363 }
364 defaultCheckFunc := func(w want, g Group) error {
365 got, want := g.(*group), w.want.(*group)
366 if !reflect.DeepEqual(got.enableLimitation, want.enableLimitation) {367 return errors.Errorf("got: \"%#v\",\n\t\t\t\twant: \"%#v\"", got, w.want)
368 }
369 if got.limitation != nil && want.limitation != nil {
call of reflect.DeepEqual copies lock value: sync/atomic.Bool contains sync/atomic.noCopy
55 }
56 defaultCheckFunc := func(w want, got Group, got1 context.Context) error {
57 if got, want := got.(*group), w.want.(*group); !reflect.DeepEqual(got.emap, want.emap) &&
58 !reflect.DeepEqual(got.enableLimitation, want.enableLimitation) && 59 got.cancel != nil {
60 return errors.Errorf("got: \"%#v\",\n\t\t\t\twant: \"%#v\"", got, w.want)
61 }
literal copies lock value from test.fields.enableLimitation: sync/atomic.Bool contains sync/atomic.noCopy
572 egctx: test.fields.egctx,
573 cancel: test.fields.cancel,
574 limitation: test.fields.limitation,
575 enableLimitation: test.fields.enableLimitation,576 emap: test.fields.emap,
577 }
578
return copies lock value: sync/atomic.Bool contains sync/atomic.noCopy
382 enableLimitation: func() atomic.Bool {
383 var el atomic.Bool
384 el.Store(false)
385 return el386 }(),
387 },
388 },
Description
Inadvertently copying a value containing a lock, such as sync.Mutex or sync.WaitGroup, may cause both copies to malfunction. Generally such values should be referred to through a pointer.
For example,
var x *sync.Mutex
p := x
var y sync.Mutex
p = &y
*p = *x
is not recommended because it copies the lock value.