diff --git a/OpenRa.Game/OrderManager.cs b/OpenRa.Game/OrderManager.cs index 00299efa9d..0c2cebea5d 100755 --- a/OpenRa.Game/OrderManager.cs +++ b/OpenRa.Game/OrderManager.cs @@ -164,22 +164,21 @@ namespace OpenRa.Game throw new InvalidOperationException( "Wrong frame number at start of stream" ); var currentFrame = 0; - var first = reader.ReadUInt32(); + var ret = new List(); while( true ) { - var ret = new List(); - while( true ) + var first = reader.ReadUInt32(); + if( first == currentFrame + 1 ) { - if( first == currentFrame + 1 ) - { - lock( orders ) - orders[ currentFrame ] = ret; - ret = new List(); - ++currentFrame; - break; - } - ret.Add( Order.Deserialize( reader, first ) ); + lock( orders ) + orders[ currentFrame ] = ret; + ret = new List(); + ++currentFrame; } + else if( first < 0x80000000 ) + throw new InvalidOperationException( "Attempted time-travel in network thread" ); + else + ret.Add( Order.Deserialize( reader, first ) ); } } ) { IsBackground = true }.Start();