/// <summary>We don't want to send on disconnected edges. So we remove said /// connections and edges!</summary> public void DisconnectionHandler(Connection con) { bool close = false; List<Connection> tunnels = null; lock(_sync) { tunnels = new List<Connection>(_tunnels.Count); foreach(Connection ccon in _tunnels) { if(con.Equals(ccon)){ continue; } tunnels.Add(ccon); } if(tunnels.Count == _tunnels.Count) { return; } _tunnels = tunnels; close = _tunnels.Count == 0; } if(close || ShouldClose()) { Close(); } //_tunnels is immutable and if we don't pass the latest _tunnels to _ias //he will go into an inconsistent state. _ias.Update(tunnels); }