fix some crashes, mostly related to network requests (#6187)
This commit is contained in:
@@ -75,6 +75,11 @@ void Connection::onNotification(const lib::messages::Metadata &metadata,
|
||||
void Connection::onClose(std::unique_ptr<lib::Listener> self,
|
||||
const std::optional<std::string> &reconnectURL)
|
||||
{
|
||||
if (isAppAboutToQuit())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
auto *app = tryGetApp();
|
||||
if (!app)
|
||||
{
|
||||
|
||||
@@ -104,7 +104,10 @@ Controller::~Controller()
|
||||
connection->close();
|
||||
}
|
||||
|
||||
this->subscriptions.clear();
|
||||
{
|
||||
std::lock_guard lock(this->subscriptionsMutex);
|
||||
this->subscriptions.clear();
|
||||
}
|
||||
|
||||
this->work.reset();
|
||||
|
||||
@@ -341,7 +344,7 @@ void Controller::subscribe(const SubscriptionRequest &request, bool isRetry)
|
||||
qCDebug(LOG) << "Make helix request for" << request;
|
||||
getHelix()->createEventSubSubscription(
|
||||
request, listener->getSessionID(),
|
||||
[this, request, connection,
|
||||
[this, request,
|
||||
weakConnection{std::weak_ptr<lib::Session>(connection)}](
|
||||
const auto &res) {
|
||||
qCDebug(LOG) << "Subscription success" << request;
|
||||
@@ -507,6 +510,12 @@ void Controller::registerConnection(std::weak_ptr<lib::Session> &&connection)
|
||||
|
||||
void Controller::retrySubscription(const SubscriptionRequest &request)
|
||||
{
|
||||
if (isAppAboutToQuit())
|
||||
{
|
||||
qCDebug(LOG) << "retrySubscription, but app is quitting" << request;
|
||||
return;
|
||||
}
|
||||
|
||||
std::lock_guard lock(this->subscriptionsMutex);
|
||||
|
||||
auto &subscription = this->subscriptions[request];
|
||||
@@ -536,6 +545,14 @@ void Controller::retrySubscription(const SubscriptionRequest &request)
|
||||
std::make_unique<boost::asio::system_timer>(this->ioContext);
|
||||
retryTimer->expires_after(subscription.backoff.next() + jitter);
|
||||
retryTimer->async_wait([this, request](const auto &ec) {
|
||||
if (isAppAboutToQuit())
|
||||
{
|
||||
qCDebug(LOG)
|
||||
<< "Retry was going to fire, but app is quitting so we won't."
|
||||
<< request;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ec)
|
||||
{
|
||||
qCDebug(LOG) << "Firing retry" << request;
|
||||
|
||||
Reference in New Issue
Block a user