From 881bdd27a5058dab088365ef95cd1d5d72ad2faa Mon Sep 17 00:00:00 2001 From: "Andres G. Aragoneses" Date: Mon, 21 Sep 2020 14:52:07 +0800 Subject: [PATCH] Core: make MtProtoSender.GenerateSequence() thread-safe Even if you're not supposed to use multiple threads with TLSharp, it might be worth it to try to make this sequence increment in a thread-safe way. Race conditions are always bad even if you know you are not supposed to use something in a certain way... @Laituex was having a ErrCode=32 'msg_seqno too low' problem and this is the first thing we looked at (even if he swore that he was not using different threads to access the telegram network) --- TLSharp.Core/Network/MtProtoSender.cs | 4 +++- TLSharp.Core/Session.cs | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/TLSharp.Core/Network/MtProtoSender.cs b/TLSharp.Core/Network/MtProtoSender.cs index 91e4457..5cbc9cf 100644 --- a/TLSharp.Core/Network/MtProtoSender.cs +++ b/TLSharp.Core/Network/MtProtoSender.cs @@ -34,7 +34,9 @@ namespace TLSharp.Core.Network private int GenerateSequence(bool confirmed) { - return confirmed ? session.Sequence++ * 2 + 1 : session.Sequence * 2; + lock (session.Lock) { + return confirmed ? session.Sequence++ * 2 + 1 : session.Sequence * 2; + } } public async Task Send(TeleSharp.TL.TLMethod request, CancellationToken token = default(CancellationToken)) diff --git a/TLSharp.Core/Session.cs b/TLSharp.Core/Session.cs index 6a526cc..48b972b 100644 --- a/TLSharp.Core/Session.cs +++ b/TLSharp.Core/Session.cs @@ -72,6 +72,8 @@ namespace TLSharp.Core public class Session { + internal object Lock = new object (); + private const string defaultConnectionAddress = "149.154.175.100";//"149.154.167.50"; private const int defaultConnectionPort = 443;