Fixed possible concurrency issue on msgId/seqno, that could freeze protocol or cause BadMsgNotification (during downloads for example)

Thanks goes to @Deeps00009
This commit is contained in:
Wizou 2025-06-24 19:01:52 +02:00
parent 5358471574
commit d49d620edd

View file

@ -1430,8 +1430,11 @@ namespace WTelegram
int seqno; int seqno;
long msgId = DateTime.UtcNow.Ticks + _dcSession.serverTicksOffset - 621355968000000000L; long msgId = DateTime.UtcNow.Ticks + _dcSession.serverTicksOffset - 621355968000000000L;
msgId = msgId * 428 + (msgId >> 24) * 25110956; // approximately unixtime*2^32 and divisible by 4 msgId = msgId * 428 + (msgId >> 24) * 25110956; // approximately unixtime*2^32 and divisible by 4
lock (_session)
{
if (msgId <= _dcSession.lastSentMsgId) msgId = _dcSession.lastSentMsgId += 4; else _dcSession.lastSentMsgId = msgId; if (msgId <= _dcSession.lastSentMsgId) msgId = _dcSession.lastSentMsgId += 4; else _dcSession.lastSentMsgId = msgId;
seqno = isContent ? _dcSession.seqno++ * 2 + 1 : _dcSession.seqno * 2; seqno = isContent ? _dcSession.seqno++ * 2 + 1 : _dcSession.seqno * 2;
}
return (msgId, seqno); return (msgId, seqno);
} }