@@ -179,6 +179,7 @@ private struct IncomingData
179179 private int _lastPeerId ;
180180 private readonly Queue < int > _peerIds ;
181181 private byte _channelsCount = 1 ;
182+ private readonly object _eventLock = new object ( ) ;
182183
183184 internal readonly NetPacketPool NetPacketPool ;
184185
@@ -572,15 +573,14 @@ private void CreateEvent(
572573 else if ( type == NetEvent . EType . MessageDelivered )
573574 unsyncEvent = UnsyncedDeliveryEvent ;
574575
575- do
576+ lock ( _eventLock )
576577 {
577578 evt = _netEventPoolHead ;
578579 if ( evt == null )
579- {
580580 evt = new NetEvent ( this ) ;
581- break ;
582- }
583- } while ( evt != Interlocked . CompareExchange ( ref _netEventPoolHead , evt . Next , evt ) ) ;
581+ else
582+ _netEventPoolHead = evt . Next ;
583+ }
584584
585585 evt . Type = type ;
586586 evt . DataReader . SetSource ( readerSource , readerSource == null ? 0 : readerSource . GetHeaderSize ( ) ) ;
@@ -657,10 +657,11 @@ internal void RecycleEvent(NetEvent evt)
657657 evt . ErrorCode = 0 ;
658658 evt . RemoteEndPoint = null ;
659659 evt . ConnectionRequest = null ;
660- do
660+ lock ( _eventLock )
661661 {
662662 evt . Next = _netEventPoolHead ;
663- } while ( evt . Next != Interlocked . CompareExchange ( ref _netEventPoolHead , evt , evt . Next ) ) ;
663+ _netEventPoolHead = evt ;
664+ }
664665 }
665666
666667 //Update function
@@ -1131,15 +1132,14 @@ private void DataReceived(NetPacket packet, IPEndPoint remoteEndPoint)
11311132 internal void CreateReceiveEvent ( NetPacket packet , DeliveryMethod method , int headerSize , NetPeer fromPeer )
11321133 {
11331134 NetEvent evt ;
1134- do
1135+ lock ( _eventLock )
11351136 {
11361137 evt = _netEventPoolHead ;
11371138 if ( evt == null )
1138- {
11391139 evt = new NetEvent ( this ) ;
1140- break ;
1141- }
1142- } while ( evt != Interlocked . CompareExchange ( ref _netEventPoolHead , evt . Next , evt ) ) ;
1140+ else
1141+ _netEventPoolHead = evt . Next ;
1142+ }
11431143 evt . Type = NetEvent . EType . Receive ;
11441144 evt . DataReader . SetSource ( packet , headerSize ) ;
11451145 evt . Peer = fromPeer ;
0 commit comments