diff --git a/src/libcalamares/network/Manager.cpp b/src/libcalamares/network/Manager.cpp index 0cf5be20f..56e36cd55 100644 --- a/src/libcalamares/network/Manager.cpp +++ b/src/libcalamares/network/Manager.cpp @@ -103,7 +103,7 @@ Manager::setCheckHasInternetUrl( const QUrl& url ) * * The extra options for the request are taken from @p options, * including the timeout setting. A timeout will cause the reply - * to abort. + * to abort. The reply is **not** scheduled for deletion. * * On failure, returns nullptr (e.g. bad URL, timeout). */ @@ -144,36 +144,28 @@ asynchronousRun( const std::unique_ptr< QNetworkAccessManager >& nam, const QUrl static QPair< RequestStatus, QNetworkReply* > synchronousRun( const std::unique_ptr< QNetworkAccessManager >& nam, const QUrl& url, const RequestOptions& options ) { - QNetworkRequest request = QNetworkRequest( url ); - QNetworkReply* reply = nam->get( request ); - QEventLoop loop; - QTimer timer; - - // Bail out early if the request is bad - if ( reply->error() ) - { - reply->deleteLater(); - return qMakePair( RequestStatus( RequestStatus::Failed ), nullptr ); - } - - options.applyToRequest( &request ); - if ( options.hasTimeout() ) + auto* reply = asynchronousRun( nam, url, options ); + if ( !reply ) { - timer.setSingleShot( true ); - QObject::connect( &timer, &QTimer::timeout, &loop, &QEventLoop::quit ); - timer.start( options.timeout() ); + return qMakePair( RequestStatus( RequestStatus::Failed ), nullptr ); } + QEventLoop loop; QObject::connect( reply, &QNetworkReply::finished, &loop, &QEventLoop::quit ); loop.exec(); - if ( options.hasTimeout() && !timer.isActive() ) + reply->deleteLater(); + if ( reply->isRunning() ) { - reply->deleteLater(); return qMakePair( RequestStatus( RequestStatus::Timeout ), nullptr ); } - - reply->deleteLater(); - return qMakePair( RequestStatus( RequestStatus::Ok ), reply ); + else if ( reply->error() != QNetworkReply::NoError ) + { + return qMakePair( RequestStatus( RequestStatus::Timeout ), nullptr ); + } + else + { + return qMakePair( RequestStatus( RequestStatus::Ok ), reply ); + } } RequestStatus