Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

runtime/race: doesn't support the plugin package #24245

Open
tiborvass opened this issue Mar 4, 2018 · 3 comments

Comments

@tiborvass
Copy link

commented Mar 4, 2018

What did you do?

// plugin/plugin.go

package main

import (
	"os"
	"time"
)

var counter int

func main() {
	os.Exit(Main())
}

func Main() int {
	go func() {
		counter++
	}()
	time.Sleep(500 * time.Millisecond)
	return counter
}
// plugin-runner.go

package main

import (
	"os"
	"plugin"
)

func main() {
	p, err := plugin.Open(os.Args[1])
	if err != nil {
		panic(err)
	}
	sym, err := p.Lookup("Main")
	if err != nil {
		panic(err)
	}
	f := sym.(func() int)
	_ = f()
}
$ go build -o plugin/plugin.so -race -buildmode=plugin plugin/plugin.go
$ go run -race plugin-runner.go plugin/plugin.so

What did you expect to see?

A DATA RACE output similar to this one:

$ go run -race plugin/plugin.go
==================
WARNING: DATA RACE
Read at 0x00000051da38 by main goroutine:
  main.Main()
      /go/src/github.com/tiborvass/goissues/plugin/race-nodetect/plugin/plugin.go:19 +0x5f
  main.main()
      /go/src/github.com/tiborvass/goissues/plugin/race-nodetect/plugin/plugin.go:11 +0x2f

Previous write at 0x00000051da38 by goroutine 6:
  main.Main.func1()
      /go/src/github.com/tiborvass/goissues/plugin/race-nodetect/plugin/plugin.go:16 +0x56

Goroutine 6 (finished) created at:
  main.Main()
      /go/src/github.com/tiborvass/goissues/plugin/race-nodetect/plugin/plugin.go:15 +0x42
  main.main()
      /go/src/github.com/tiborvass/goissues/plugin/race-nodetect/plugin/plugin.go:11 +0x2f
==================
exit status 1

What did you see instead?

No output. I reproduced it 100% on both linux and darwin.

System details

go version go1.10 linux/amd64
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/go"
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build269754766=/tmp/go-build -gno-record-gcc-switches"
GOROOT/bin/go version: go version go1.10 linux/amd64
GOROOT/bin/go tool compile -V: compile version go1.10
uname -sr: Linux 4.9.75-linuxkit-aufs
/lib/x86_64-linux-gnu/libc.so.6: GNU C Library (Debian GLIBC 2.24-11+deb9u1) stable release version 2.24, by Roland McGrath et al.
@mvdan

This comment has been minimized.

Copy link
Member

commented Mar 4, 2018

/cc @dvyukov

@bradfitz bradfitz changed the title Race detector does not detect data races in a loaded plugin runtime/race: doesn't support the plugin package Mar 5, 2018

@bradfitz bradfitz added this to the Unplanned milestone Mar 5, 2018

@dvyukov dvyukov added the RaceDetector label Mar 5, 2018

@szuecs

This comment has been minimized.

Copy link

commented Feb 26, 2019

Sounds like an issue to our production application, which enables users to build their own Go plugins to enhance the application.

It would be nice if this would get a fix. Is this complicated or just not prioritized yet, because of plugin is not first class anyhow?

@ianlancetaylor

This comment has been minimized.

Copy link
Contributor

commented Feb 26, 2019

It's not prioritized. It would help if somebody could figure out what the actual problem is. It may be obvious, it may not; I don't know.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
6 participants
You can’t perform that action at this time.