mirror of
https://github.com/sochix/TLSharp.git
synced 2025-12-06 08:02:00 +01:00
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:
parent
ef499c6fef
commit
79ad0fc21e
|
|
@ -37,8 +37,10 @@ namespace TgSharp.Core.Network
|
||||||
|
|
||||||
private int GenerateSequence(bool confirmed)
|
private int GenerateSequence(bool confirmed)
|
||||||
{
|
{
|
||||||
|
lock (session.Lock) {
|
||||||
return confirmed ? session.Sequence++ * 2 + 1 : session.Sequence * 2;
|
return confirmed ? session.Sequence++ * 2 + 1 : session.Sequence * 2;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task Send(TLMethod request, CancellationToken token = default(CancellationToken))
|
public async Task Send(TLMethod request, CancellationToken token = default(CancellationToken))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,8 @@ namespace TgSharp.Core
|
||||||
|
|
||||||
public class Session
|
public class Session
|
||||||
{
|
{
|
||||||
|
internal object Lock = new object ();
|
||||||
|
|
||||||
public int Sequence { get; set; }
|
public int Sequence { get; set; }
|
||||||
#if CI
|
#if CI
|
||||||
// see the same CI-wrapped assignment in .FromBytes(), but this one will become useful
|
// see the same CI-wrapped assignment in .FromBytes(), but this one will become useful
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue