Port mutex

This commit is contained in:
Neil Alexander 2021-02-03 17:49:12 +00:00
parent 283efd0438
commit 598b3ce5ad
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -14,6 +14,7 @@ import (
"net" "net"
"net/http" "net/http"
"os" "os"
"sync"
"time" "time"
"github.com/gorilla/mux" "github.com/gorilla/mux"
@ -107,6 +108,8 @@ func (m *DendriteMonolith) Conduit(zone string) (*Conduit, error) {
l, r := net.Pipe() l, r := net.Pipe()
conduit := &Conduit{conn: r, port: 0} conduit := &Conduit{conn: r, port: 0}
go func() { go func() {
conduit.portMutex.Lock()
defer conduit.portMutex.Unlock()
loop: loop:
for i := 1; i <= 10; i++ { for i := 1; i <= 10; i++ {
logrus.Errorf("Attempting authenticated connect (attempt %d)", i) logrus.Errorf("Attempting authenticated connect (attempt %d)", i)
@ -365,11 +368,14 @@ func (m *DendriteMonolith) Suspend() {
} }
type Conduit struct { type Conduit struct {
conn net.Conn conn net.Conn
port types.SwitchPortID port types.SwitchPortID
portMutex sync.Mutex
} }
func (c *Conduit) Port() int { func (c *Conduit) Port() int {
c.portMutex.Lock()
defer c.portMutex.Unlock()
return int(c.port) return int(c.port)
} }