Browse Source

fix race in UIserver

boyska 6 years ago
parent
commit
f9812d3ef8
1 changed files with 5 additions and 0 deletions
  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()