libOpenflow
libOpenflow copied to clipboard
dead lock or lost message when ovs is unstable
this function will lost message or make block if the connection of ovs is closing.
// Listen for a Shutdown signal or Outbound messages. func (m *MessageStream) outbound() { for { select { case <-m.Shutdown: log.Infof("Closing OpenFlow message stream.") m.conn.Close() for i := 0; i < numParserGoroutines; i++ { m.parserShutdown <- true } return case msg := <-m.Outbound: // Forward outbound messages to conn data, _ := msg.MarshalBinary() if _, err := m.conn.Write(data); err != nil { log.Warnln("OutboundError:", err) m.Error <- err m.Shutdown <- true } log.Debugf("Sent(%d): %v", len(data), data) } } }
dead lock for m.Shutdown