-
Notifications
You must be signed in to change notification settings - Fork 29
Closed
Description
A panic occurs in the Ziti Go SDK when multiple goroutines access getEdgeRouterConn(). The issue arises due to concurrent iteration and modification of the SupportedProtocols map inside session.EdgeRouters. This results in a fatal runtime error:
Logs/Stack Trace:
fatal error: concurrent map iteration and map write
goroutine 77040781 [running]:
github.com/openziti/sdk-golang/ziti.(*ContextImpl).getEdgeRouterConn(0xc00015d900, 0xc021dbcb00, {0x2598140, 0xc0203d48a0})
/go/pkg/mod/github.com/openziti/[email protected]/ziti/ziti.go:1286 +0x4c7
github.com/openziti/sdk-golang/ziti.(*ContextImpl).dialSession(0xc01a84ed90?, 0xc012cc9d60, 0xc021dbcb00, 0xc0203d48a0)
/go/pkg/mod/github.com/openziti/[email protected]/ziti/ziti.go:1200 +0x2c
github.com/openziti/sdk-golang/ziti.(*ContextImpl).DialWithOptions(0xc00015d900, {0xc0165b91a0, 0x30}, 0xc0057439a0)
/go/pkg/mod/github.com/openziti/[email protected]/ziti/ziti.go:1098 +0x52e
The issue occurs in getEdgeRouterConn(), specifically in this code:
for _, edgeRouter := range session.EdgeRouters {
for proto, addr := range edgeRouter.SupportedProtocols {
addr = strings.Replace(addr, "://", ":", 1)
edgeRouter.SupportedProtocols[proto] = addr // <--- Modifies map while iterating
}
}