Explorar o código

fix race in UIserver

boyska %!s(int64=6) %!d(string=hai) anos
pai
achega
f9812d3ef8
Modificáronse 1 ficheiros con 5 adicións e 0 borrados
  1. 5 0
      uiserver/server.go

+ 5 - 0
uiserver/server.go

@@ -57,6 +57,7 @@ type NetUI struct {
 	workers      []Worker
 	workersMutex sync.Mutex
 	sock         *net.Listener
+	sockMu       sync.Mutex
 	exit         chan interface{}
 }
 
@@ -95,6 +96,8 @@ func (n *NetUI) Update() {
 
 // Close shuts the TCPserver down synchronously
 func (n *NetUI) Close() {
+	n.sockMu.Lock()
+	defer n.sockMu.Unlock()
 	if n.sock != nil {
 		(*n.sock).Close()
 	}
@@ -141,7 +144,9 @@ func (n *NetUI) Run(sock net.Listener) error {
 	if n.sock != nil {
 		return fmt.Errorf("More than one Run for a single NetUI is currently unsupported")
 	}
+	n.sockMu.Lock()
 	n.sock = &sock
+	n.sockMu.Unlock()
 	defer sock.Close()
 	for {
 		conn, err := sock.Accept()