mirror of
https://github.com/danog/MadelineProto.git
synced 2024-11-27 01:34:40 +01:00
Do not unreference timeout cancellations
This commit is contained in:
parent
5f7325f71b
commit
ebe06ad96a
@ -26,7 +26,6 @@ use Amp\Future;
|
||||
use Amp\Future\UnhandledFutureError;
|
||||
use Amp\Ipc\Sync\ChannelledSocket;
|
||||
use Amp\SignalException;
|
||||
use Amp\TimeoutCancellation;
|
||||
use Amp\TimeoutException;
|
||||
use danog\MadelineProto\ApiWrappers\Start;
|
||||
use danog\MadelineProto\Ipc\Client;
|
||||
@ -312,7 +311,7 @@ final class API extends AbstractAPI
|
||||
$this->session,
|
||||
$settings,
|
||||
$forceFull
|
||||
)->await(new TimeoutCancellation(30.0));
|
||||
)->await(Tools::getTimeoutCancellation(30.0));
|
||||
} catch (CancelledException $e) {
|
||||
if (!$e->getPrevious() instanceof TimeoutException) {
|
||||
throw $e;
|
||||
|
@ -22,9 +22,9 @@ namespace danog\MadelineProto;
|
||||
|
||||
use Amp\Cancellation;
|
||||
use Amp\CancelledException;
|
||||
use Amp\DeferredCancellation;
|
||||
use Amp\DeferredFuture;
|
||||
use Amp\Future;
|
||||
use Amp\TimeoutCancellation;
|
||||
use Amp\TimeoutException;
|
||||
use Closure;
|
||||
use Generator;
|
||||
@ -120,7 +120,7 @@ abstract class AsyncTools extends StrTools
|
||||
*/
|
||||
public static function timeout(Generator|Future $promise, int $timeout): mixed
|
||||
{
|
||||
return self::call($promise)->await(new TimeoutCancellation($timeout/1000));
|
||||
return self::call($promise)->await(Tools::getTimeoutCancellation($timeout/1000));
|
||||
}
|
||||
/**
|
||||
* Creates an artificial timeout for any `Promise`.
|
||||
@ -305,6 +305,17 @@ abstract class AsyncTools extends StrTools
|
||||
{
|
||||
delay($time);
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
public static function getTimeoutCancellation(float $timeout, string $message = "Operation timed out"): Cancellation
|
||||
{
|
||||
$deferred = new DeferredCancellation;
|
||||
EventLoop::delay($timeout, fn () => $deferred->cancel(new TimeoutException($message)));
|
||||
return $deferred->getCancellation();
|
||||
}
|
||||
|
||||
/**
|
||||
* Asynchronously read line.
|
||||
*
|
||||
|
@ -32,7 +32,6 @@ use Amp\Socket\ResourceSocket;
|
||||
use Amp\Socket\Socket;
|
||||
use Amp\Socket\SocketAddress;
|
||||
use Amp\Socket\SocketConnector;
|
||||
use Amp\TimeoutCancellation;
|
||||
use AssertionError;
|
||||
use danog\MadelineProto\Stream\ConnectionContext;
|
||||
use Revolt\EventLoop;
|
||||
@ -119,7 +118,7 @@ final class DoHConnector implements SocketConnector
|
||||
$watcher = EventLoop::onWritable($socket, $deferred->complete(...));
|
||||
$id = $token->subscribe($deferred->error(...));
|
||||
try {
|
||||
$deferred->getFuture()->await(new TimeoutCancellation($timeout));
|
||||
$deferred->getFuture()->await(Tools::getTimeoutCancellation($timeout));
|
||||
} catch (CancelledException $e) {
|
||||
if (!$e->getPrevious() instanceof DnsTimeoutException) {
|
||||
throw $e;
|
||||
|
@ -43,7 +43,6 @@ use danog\MadelineProto\LocalFile;
|
||||
use danog\MadelineProto\ParseMode;
|
||||
use danog\MadelineProto\RemoteUrl;
|
||||
use danog\MadelineProto\Settings;
|
||||
use Webmozart\Assert\Assert;
|
||||
|
||||
/**
|
||||
* Manages upload and download of files.
|
||||
@ -89,7 +88,7 @@ trait FilesAbstraction
|
||||
return new VideoSticker($this, $media, $attr, $has_video, $protected);
|
||||
}
|
||||
|
||||
assert($has_document_photo !== null);
|
||||
\assert($has_document_photo !== null);
|
||||
if ($attr['mask']) {
|
||||
return new MaskSticker($this, $media, $attr, $has_document_photo, $protected);
|
||||
}
|
||||
@ -114,7 +113,7 @@ trait FilesAbstraction
|
||||
}
|
||||
}
|
||||
if ($has_animated) {
|
||||
assert($has_video !== null);
|
||||
\assert($has_video !== null);
|
||||
return new Gif($this, $media, $has_video, $protected);
|
||||
}
|
||||
if ($has_video) {
|
||||
|
@ -24,7 +24,6 @@ use Amp\CancelledException;
|
||||
use Amp\DeferredFuture;
|
||||
use Amp\Http\Client\Request;
|
||||
use Amp\Http\Client\Response;
|
||||
use Amp\TimeoutCancellation;
|
||||
use Amp\TimeoutException;
|
||||
use danog\MadelineProto\API;
|
||||
use danog\MadelineProto\EventHandler\AbstractMessage;
|
||||
@ -52,6 +51,7 @@ use danog\MadelineProto\RPCErrorException;
|
||||
use danog\MadelineProto\Settings;
|
||||
use danog\MadelineProto\TL\TL;
|
||||
use danog\MadelineProto\TL\Types\Button;
|
||||
use danog\MadelineProto\Tools;
|
||||
use danog\MadelineProto\UpdateHandlerType;
|
||||
use danog\MadelineProto\VoIP;
|
||||
use Revolt\EventLoop;
|
||||
@ -227,7 +227,7 @@ trait UpdateHandler
|
||||
try {
|
||||
$this->update_deferred = new DeferredFuture();
|
||||
$this->update_deferred->getFuture()->await(
|
||||
$timeout === INF ? null : new TimeoutCancellation($timeout)
|
||||
$timeout === INF ? null : Tools::getTimeoutCancellation($timeout)
|
||||
);
|
||||
} catch (CancelledException $e) {
|
||||
if (!$e->getPrevious() instanceof TimeoutException) {
|
||||
|
@ -25,7 +25,6 @@ use Amp\DeferredCancellation;
|
||||
use Amp\DeferredFuture;
|
||||
use Amp\Future;
|
||||
use Amp\Ipc\Sync\ChannelledSocket;
|
||||
use Amp\TimeoutCancellation;
|
||||
use Amp\TimeoutException;
|
||||
use danog\MadelineProto\Db\DbPropertiesFactory;
|
||||
use danog\MadelineProto\Db\DriverArray;
|
||||
@ -268,7 +267,7 @@ abstract class Serialization
|
||||
}
|
||||
}
|
||||
try {
|
||||
if ($res = $cancelConnect->await(new TimeoutCancellation(1.0))) {
|
||||
if ($res = $cancelConnect->await(Tools::getTimeoutCancellation(1.0))) {
|
||||
if ($res instanceof Throwable) {
|
||||
return [$res, null];
|
||||
}
|
||||
|
@ -24,7 +24,6 @@ use Amp\Cancellation;
|
||||
use Amp\CancelledException;
|
||||
use Amp\CompositeCancellation;
|
||||
use Amp\DeferredFuture;
|
||||
use Amp\TimeoutCancellation;
|
||||
use AssertionError;
|
||||
use BaconQrCode\Renderer\Image\SvgImageBackEnd;
|
||||
use BaconQrCode\Renderer\ImageRenderer;
|
||||
@ -33,6 +32,7 @@ use BaconQrCode\Renderer\RendererStyle\RendererStyle;
|
||||
use BaconQrCode\Writer;
|
||||
use danog\MadelineProto\Ipc\Client;
|
||||
use danog\MadelineProto\MTProto;
|
||||
use danog\MadelineProto\Tools;
|
||||
use JsonSerializable;
|
||||
|
||||
/**
|
||||
@ -90,7 +90,7 @@ final class LoginQrCode implements JsonSerializable
|
||||
|
||||
public function getExpirationCancellation(): Cancellation
|
||||
{
|
||||
return new TimeoutCancellation((float) $this->expiresIn(), "The QR code expired!");
|
||||
return Tools::getTimeoutCancellation((float) $this->expiresIn(), "The QR code expired!");
|
||||
}
|
||||
|
||||
public function getLoginCancellation(): Cancellation
|
||||
|
@ -21,10 +21,10 @@ declare(strict_types=1);
|
||||
namespace danog\MadelineProto\Wrappers;
|
||||
|
||||
use Amp\Sync\LocalMutex;
|
||||
use Amp\TimeoutCancellation;
|
||||
use danog\MadelineProto\API;
|
||||
use danog\MadelineProto\Exception;
|
||||
use danog\MadelineProto\Settings;
|
||||
use danog\MadelineProto\Tools;
|
||||
use Throwable;
|
||||
use Webmozart\Assert\Assert;
|
||||
|
||||
@ -105,7 +105,7 @@ trait DialogHandler
|
||||
$result = $this->methodCallAsyncRead(
|
||||
'updates.getDifference',
|
||||
$state,
|
||||
['cancellation' => new TimeoutCancellation(15.0), 'FloodWaitLimit' => 86400]
|
||||
['cancellation' => Tools::getTimeoutCancellation(15.0), 'FloodWaitLimit' => 86400]
|
||||
)['_'];
|
||||
} catch (Throwable $e) {
|
||||
$this->logger->logger("Got {$e->getMessage()} while getting difference, trying another PTS...");
|
||||
|
@ -22,7 +22,6 @@ namespace danog\MadelineProto\Wrappers;
|
||||
|
||||
use Amp\CancelledException;
|
||||
use Amp\CompositeCancellation;
|
||||
use Amp\TimeoutCancellation;
|
||||
use danog\MadelineProto\API;
|
||||
use danog\MadelineProto\Exception;
|
||||
use danog\MadelineProto\Ipc\Client;
|
||||
@ -222,7 +221,7 @@ trait Start
|
||||
/** @var ?LoginQrCode */
|
||||
$qr = $this->qrLogin();
|
||||
if (isset($_GET['waitQrCodeOrLogin'])) {
|
||||
$qr = $qr?->waitForLoginOrQrCodeExpiration(new TimeoutCancellation(5.0));
|
||||
$qr = $qr?->waitForLoginOrQrCodeExpiration(Tools::getTimeoutCancellation(5.0));
|
||||
}
|
||||
} catch (CancelledException) {
|
||||
/** @var ?LoginQrCode */
|
||||
|
Loading…
Reference in New Issue
Block a user