wasm: fix crash when network reply is closed

We do not need to call QNetworkReply::close as that closes the
QIODevice that we do not use (or have)

Pick-to: 6.4
Fixes: QTBUG-77210
Change-Id: I812bc324f49ae28b8c622cfa89f9690e012bf216
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
This commit is contained in:
Lorn Potter 2022-09-21 18:39:55 +10:00
parent 823b7c7bce
commit 9a5a31268e
2 changed files with 22 additions and 5 deletions

View File

@ -68,22 +68,37 @@ QByteArray QNetworkReplyWasmImpl::methodName() const
void QNetworkReplyWasmImpl::close()
{
Q_D(QNetworkReplyWasmImpl);
if (d->state != QNetworkReplyPrivate::Aborted &&
d->state != QNetworkReplyPrivate::Finished &&
d->state != QNetworkReplyPrivate::Idle) {
d->state = QNetworkReplyPrivate::Finished;
d->setCanceled();
}
QNetworkReply::close();
setFinished(true);
emit finished();
}
void QNetworkReplyWasmImpl::abort()
{
Q_D(QNetworkReplyWasmImpl);
if (d->state == QNetworkReplyPrivate::Finished || d->state == QNetworkReplyPrivate::Aborted)
return;
d->state = QNetworkReplyPrivate::Aborted;
d->m_fetch->userData = nullptr;
d->setCanceled();
}
d->emitReplyError(QNetworkReply::OperationCanceledError, QStringLiteral("Operation canceled"));
close();
void QNetworkReplyWasmImplPrivate::setCanceled()
{
Q_Q(QNetworkReplyWasmImpl);
m_fetch->userData = nullptr;
emitReplyError(QNetworkReply::OperationCanceledError, QStringLiteral("Operation canceled"));
q->setFinished(true);
emit q->finished();
}
qint64 QNetworkReplyWasmImpl::bytesAvailable() const
@ -239,6 +254,7 @@ void QNetworkReplyWasmImplPrivate::doSendRequest()
attr.destinationPath = destinationPath.constData();
m_fetch = emscripten_fetch(&attr, request.url().toString().toUtf8());
state = Working;
}
void QNetworkReplyWasmImplPrivate::emitReplyError(QNetworkReply::NetworkError errorCode, const QString &errorString)

View File

@ -112,6 +112,7 @@ public:
emscripten_fetch_t *m_fetch;
void setReplyFinished();
void setCanceled();
Q_DECLARE_PUBLIC(QNetworkReplyWasmImpl)
};