goccy / go-graphviz

Go bindings for Graphviz

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Intermittent SIGSEGV on RenderFilename

samene opened this issue · comments

Intermittently get SIGSEGV on RenderFilename. Sometimes works 5/10 times doesnt.

This is my code

func generateImage(outputFolder string, buff bytes.Buffer) {
	g := graphviz.New().SetLayout(graphviz.FDP)
	graph, err := graphviz.ParseBytes(buff.Bytes())

	defer func() {
		if err := graph.Close(); err != nil {
			log.Fatal().Err(err)
		}
		g.Close()
	}()

	if err != nil {
		log.Fatal().Err(err).Msg("Failed to initialize graph library")
	}
	if err := g.RenderFilename(graph, graphviz.PNG, outputFolder+"/dependencies.png"); err != nil {
		log.Fatal().Err(err).Msg("Failed to create dependencies.png")
	}
	log.Info().Msg("File " + outputFolder + "/" + "dependencies.png generated")
}

This is the stack trace 5/10 times.

fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x8f5f7a]

runtime stack:
runtime.throw({0xa28ac6, 0x8652ed})
        /usr/local/go/src/runtime/panic.go:1198 +0x71
runtime.sigpanic()
        /usr/local/go/src/runtime/signal_unix.go:719 +0x396

goroutine 1 [syscall]:
runtime.cgocall(0x8493c0, 0xc0003178b8)
        /usr/local/go/src/runtime/cgocall.go:156 +0x5c fp=0xc000317890 sp=0xc000317858 pc=0x41d3dc
github.com/goccy/go-graphviz/internal/ccall._Cfunc_gvLayout(0x7f7ea00012b0, 0x7f7ea0009180, 0x7f7ea001e520)
        _cgo_gotypes.go:2378 +0x4c fp=0xc0003178b8 sp=0xc000317890 pc=0x5a278c
github.com/goccy/go-graphviz/internal/ccall.GvLayout.func1(0x11, 0x17, {0xa13625, 0x11})
        /home/smene/go/pkg/mod/github.com/goccy/go-graphviz@v0.0.9/internal/ccall/gvc.go:736 +0xa7 fp=0xc000317900 sp=0xc0003178b8 pc=0x5aa607
github.com/goccy/go-graphviz/internal/ccall.GvLayout(0xc000317a16, 0xc000317990, {0xa13625, 0x7f7ea0009101})
        /home/smene/go/pkg/mod/github.com/goccy/go-graphviz@v0.0.9/internal/ccall/gvc.go:736 +0x1e fp=0xc000317930 sp=0xc000317900 pc=0x5aa51e
github.com/goccy/go-graphviz/gvc.(*Context).Layout(...)
        /home/smene/go/pkg/mod/github.com/goccy/go-graphviz@v0.0.9/gvc/gvc.go:29
github.com/goccy/go-graphviz.(*Graphviz).RenderFilename(0xc00011a4e0, 0xc0001280b0, {0xa136ac, 0x3}, {0xc000317a10, 0x17})
        /home/smene/go/pkg/mod/github.com/goccy/go-graphviz@v0.0.9/graphviz.go:115 +0x85 fp=0xc0003179b0 sp=0xc000317930 pc=0x60db85
infovista/devops/ait/internal/systembom.generateImage({0xa143c6, 0x6})
        /home/smene/git/assets-identification-tool/internal/systembom/dependency_graph.go:198 +0x45a fp=0xc000317b48 sp=0xc0003179b0 pc=0x7a753a
infovista/devops/ait/internal/systembom.GenerateDependencyGraph({0xa143c6, 0x6}, {0xa1353b, 0x3})
        /home/smene/git/assets-identification-tool/internal/systembom/dependency_graph.go:50 +0x58 fp=0xc000317b88 sp=0xc000317b48 pc=0x7a5a58
infovista/devops/ait/cmd.glob..func4(0xfcc7e0, {0xa139ce, 0x0, 0x0})
        /home/smene/git/assets-identification-tool/cmd/graph.go:25 +0xac fp=0xc000317bc0 sp=0xc000317b88 pc=0x84666c
github.com/spf13/cobra.(*Command).execute(0xfcc7e0, {0x10b5838, 0x0, 0x0})
        /home/smene/go/pkg/mod/github.com/spf13/cobra@v1.3.0/command.go:860 +0x5f8 fp=0xc000317c80 sp=0xc000317bc0 pc=0x7d8738
github.com/spf13/cobra.(*Command).ExecuteC(0xfcc060)
        /home/smene/go/pkg/mod/github.com/spf13/cobra@v1.3.0/command.go:974 +0x3bc fp=0xc000317d38 sp=0xc000317c80 pc=0x7d8e3c
github.com/spf13/cobra.(*Command).Execute(...)
        /home/smene/go/pkg/mod/github.com/spf13/cobra@v1.3.0/command.go:902
infovista/devops/ait/cmd.Execute()
        /home/smene/git/assets-identification-tool/cmd/root.go:32 +0x17c fp=0xc000317f70 sp=0xc000317d38 pc=0x845ddc
main.main()
        /home/smene/git/assets-identification-tool/main.go:10 +0x17 fp=0xc000317f80 sp=0xc000317f70 pc=0x846a37
runtime.main()
        /usr/local/go/src/runtime/proc.go:255 +0x227 fp=0xc000317fe0 sp=0xc000317f80 pc=0x44fd67
runtime.goexit()
        /usr/local/go/src/runtime/asm_amd64.s:1581 +0x1 fp=0xc000317fe8 sp=0xc000317fe0 pc=0x47ca21

goroutine 18 [IO wait]:
internal/poll.runtime_pollWait(0x7f7ec01311b0, 0x72)
        /usr/local/go/src/runtime/netpoll.go:234 +0x89
internal/poll.(*pollDesc).wait(0xc00003ce80, 0xc000288000, 0x0)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        /usr/local/go/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00003ce80, {0xc000288000, 0x1000, 0x1000})
        /usr/local/go/src/internal/poll/fd_unix.go:167 +0x25a
net.(*netFD).Read(0xc00003ce80, {0xc000288000, 0x4501e7, 0xc00007dc30})
        /usr/local/go/src/net/fd_posix.go:56 +0x29
net.(*conn).Read(0xc000286000, {0xc000288000, 0x27, 0xc0000001a0})
        /usr/local/go/src/net/net.go:183 +0x45
net/http.(*persistConn).Read(0xc00020a5a0, {0xc000288000, 0xc000034600, 0xc00007dd30})
        /usr/local/go/src/net/http/transport.go:1926 +0x4e
bufio.(*Reader).fill(0xc000282060)
        /usr/local/go/src/bufio/bufio.go:101 +0x103
bufio.(*Reader).Peek(0xc000282060, 0x1)
        /usr/local/go/src/bufio/bufio.go:139 +0x5d
net/http.(*persistConn).readLoop(0xc00020a5a0)
        /usr/local/go/src/net/http/transport.go:2087 +0x1ac
created by net/http.(*Transport).dialConn
        /usr/local/go/src/net/http/transport.go:1747 +0x1e05

goroutine 19 [select]:
net/http.(*persistConn).writeLoop(0xc00020a5a0)
        /usr/local/go/src/net/http/transport.go:2386 +0xfb
created by net/http.(*Transport).dialConn
        /usr/local/go/src/net/http/transport.go:1748 +0x1e65

Info

go version
go version go1.17.6 linux/amd64
uname -a
Linux klerity-dev-smene 4.18.0-365.el8.x86_64 #1 SMP Thu Feb 10 16:11:23 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/os-release
NAME="CentOS Stream"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Stream 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"