Skip to content

Commit cdc88ee

Browse files
committed
Final fix
1 parent 7f09e7e commit cdc88ee

5 files changed

Lines changed: 21 additions & 10 deletions

File tree

src/DataCenterConnection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ private function restoreBackup(): void
422422
$message->setMsgId(null);
423423
}
424424
$message->connection = $connection = $this->getConnection();
425-
$this->API->logger("Resending $message to DC {$this->datacenter}");
425+
$this->API->logger("Restoring $message to DC {$this->datacenter}");
426426
EventLoop::queue($connection->sendMessage(...), $message);
427427
}
428428
}

src/Loop/Connection/WriteLoop.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
use Amp\ByteStream\StreamException;
2424
use Amp\DeferredFuture;
25-
use AssertionError;
2625
use danog\Loop\Loop;
2726
use danog\MadelineProto\Connection;
2827
use danog\MadelineProto\Logger;

src/MTProto/MTProtoOutgoingMessage.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,22 @@ public function sent(): void
220220
}
221221
public function unlink(): void
222222
{
223-
$this->next->prev = $this->prev;
224-
$this->prev->next = $this->next;
223+
if (isset($this->next)) {
224+
$this->next->prev = $this->prev;
225+
$this->prev->next = $this->next;
226+
unset($this->next, $this->prev);
227+
228+
}
229+
225230
$this->connection->pendingOutgoingGauge?->dec();
231+
232+
if ($this->unencrypted) {
233+
unset($this->connection->unencryptedPendingOutgoing->check_queue[$this]);
234+
} elseif ($this->specialMethodType === SpecialMethodType::UNAUTHED_METHOD) {
235+
unset($this->connection->uninitedPendingOutgoing->check_queue[$this]);
236+
} else {
237+
unset($this->connection->mainPendingOutgoing->check_queue[$this]);
238+
}
226239
}
227240
private function check(): void
228241
{

src/MTProtoSession/ResponseHandler.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ private function handleRpcError(MTProtoOutgoingMessage $request, array $response
341341
case 400:
342342
if ($response['error_message'] === 'CONNECTION_NOT_INITED') {
343343
$this->shared->auth->connectionState->publish(ConnectionState::ENCRYPTED_NOT_INITED);
344-
$this->API->logger("Resending $request...");
344+
$this->API->logger("Resending $request due to CONNECTION_NOT_INITED...");
345345
$this->methodRecall($request, $this->datacenter);
346346
return null;
347347
}

src/MTProtoSession/Session.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,9 @@ public function createSession(): void
189189
10000_000_000,
190190
]
191191
);
192-
$this->mainPendingOutgoing ??= new LinkedList;
193-
$this->unencryptedPendingOutgoing ??= new LinkedList;
194-
$this->uninitedPendingOutgoing ??= new LinkedList;
192+
$this->mainPendingOutgoing ??= new LinkedList($this->datacenter, $this->API);
193+
$this->unencryptedPendingOutgoing ??= new LinkedList($this->datacenter, $this->API);
194+
$this->uninitedPendingOutgoing ??= new LinkedList($this->datacenter, $this->API);
195195
if ($this->session_id === null) {
196196
$this->resetSession("creating initial session");
197197
}
@@ -209,10 +209,9 @@ public function backupSession(): array
209209
$message = $list;
210210
while ($message !== null) {
211211
$message = $message->prev;
212-
if ($message === $list) {
212+
if (!$message instanceof MTProtoOutgoingMessage) {
213213
break;
214214
}
215-
\assert($message instanceof MTProtoOutgoingMessage);
216215
$message->unlink();
217216
$pending []= $message;
218217
}

0 commit comments

Comments
 (0)