Skip to content

ApplyFuncSeq has DATA RACE issue #120

Open
@ericuni

Description

@ericuni
package playground_test

import (
	"testing"

	"github.com/agiledragon/gomonkey/v2"
	"github.com/stretchr/testify/assert"
	"golang.org/x/sync/errgroup"
)

func foo() int {
	return 0
}

func run() error {
	var eg errgroup.Group

	eg.Go(func() error {
		foo()
		return nil
	})

	eg.Go(func() error {
		foo()
		return nil
	})

	if err := eg.Wait(); err != nil {
		return err
	}

	return nil
}

func TestPlayground(t *testing.T) {
	assert := assert.New(t)

	patches := gomonkey.NewPatches()
	defer patches.Reset()

	patches.ApplyFuncSeq(foo, []gomonkey.OutputCell{
		{
			Values: gomonkey.Params{1},
		},
		{
			Values: gomonkey.Params{2},
		},
	})

	err := run()
	assert.Nil(err)
}

run with go test -race -gcflags=all=-l, would get the following error

==================
WARNING: DATA RACE
Read at 0x00c000222d88 by goroutine 8:
  github.com/agiledragon/gomonkey/v2.getDoubleFunc.func1()
      /data00/home/liuqi.victor/go/pkg/mod/github.com/agiledragon/gomonkey/v2@v2.9.0/patch.go:304 +0xde
  reflect.callReflect()
      /data00/home/liuqi.victor/opt/go/src/reflect/value.go:770 +0x762
  reflect.callReflect()
      <autogenerated>:1 +0x64
  reflect.makeFuncStub()
      /data00/home/liuqi.victor/opt/go/src/reflect/asm_amd64.s:47 +0x79
  golang.org/x/sync/errgroup.(*Group).Go.func1()
      /data00/home/liuqi.victor/go/pkg/mod/golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x86

Previous write at 0x00c000222d88 by goroutine 9:
  github.com/agiledragon/gomonkey/v2.getDoubleFunc.func1()
      /data00/home/liuqi.victor/go/pkg/mod/github.com/agiledragon/gomonkey/v2@v2.9.0/patch.go:305 +0x108
  reflect.callReflect()
      /data00/home/liuqi.victor/opt/go/src/reflect/value.go:770 +0x762
  reflect.callReflect()
      <autogenerated>:1 +0x64
  reflect.makeFuncStub()
      /data00/home/liuqi.victor/opt/go/src/reflect/asm_amd64.s:47 +0x79
  golang.org/x/sync/errgroup.(*Group).Go.func1()
      /data00/home/liuqi.victor/go/pkg/mod/golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x86

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions