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).

(Backported from 881bdd27a5 )

# Conflicts:
#	src/TgSharp.Core/Session.cs
This commit is contained in:
Andres G. Aragoneses 2020-10-14 20:48:43 +02:00
parent ef499c6fef
commit 79ad0fc21e
2 changed files with 5 additions and 1 deletions

View file

@ -37,7 +37,9 @@ namespace TgSharp.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(TLMethod request, CancellationToken token = default(CancellationToken))

View file

@ -52,6 +52,8 @@ namespace TgSharp.Core
public class Session
{
internal object Lock = new object ();
public int Sequence { get; set; }
#if CI
// see the same CI-wrapped assignment in .FromBytes(), but this one will become useful