Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-60366

No new session is created when the networkaccessibility went to notAccessible

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • P2: Important
    • 5.9.4
    • 5.7.1
    • None

    Description

      On patform Ubuntu16.04 64 bit and RaspberryPi3

      In one of my projects I noticed that; when I lose my internet connection and getting internet back a short time after that; the networkAccessibility keeps being nonAccessible.

      After some debugging I noticed that in QNetworkAccessManager in createRequest a QDisabledNetworkReply was returned if networkAccessible == NotAccessible.
      And that a new session is started after that. So that will only happen when networkAccessible != NotAccessible.

      (loosely related: There could also be some bugs in that networkAccessibleChanged is not always fired when I disconnect my internet during a request but that is another issue I think of which I do not have more details)

      I must note that in my build I also incorperated this patch meant for 5.6.3 on 5.7.1:
      https://bugreports.qt.io/browse/QTBUG-57110
      https://codereview.qt-project.org/#/c/176831/

      I got my ability to create successfull requests back after switching those 2 parts of code. As it looks like to me that you need to have tried to open a session to determine if there is a connection possible.

      Therefore i have here my patch (which also contains the change mentioned above) (I must say that I dont fully understands the whole networking stuff architecture because I have not studied that):

      diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp
      index 587ab27..ac2c19c 100644
      --- a/src/network/access/qnetworkaccessmanager.cpp
      +++ b/src/network/access/qnetworkaccessmanager.cpp
      @@ -1161,12 +1161,6 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
           }
       
       #ifndef QT_NO_BEARERMANAGEMENT
      -    // Return a disabled network reply if network access is disabled.
      -    // Except if the scheme is empty or file://.
      -    if (d->networkAccessible == NotAccessible && !isLocalFile) {
      -        return new QDisabledNetworkReply(this, req, op);
      -    }
      -
           if (!d->networkSessionStrongRef && (d->initializeSession || !d->networkConfiguration.identifier().isEmpty())) {
               QNetworkConfigurationManager manager;
               if (!d->networkConfiguration.identifier().isEmpty()) {
      @@ -1183,6 +1177,12 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
                       d->initializeSession = false;
               }
           }
      +
      +    // Return a disabled network reply if network access is disabled.
      +    // Except if the scheme is empty or file://.
      +    if (d->networkAccessible == NotAccessible && !isLocalFile) {
      +        return new QDisabledNetworkReply(this, req, op);
      +    }
       #endif
       
           QNetworkRequest request = req;
      @@ -1605,7 +1605,7 @@ void QNetworkAccessManagerPrivate::_q_networkSessionClosed()
               QObject::disconnect(networkSession.data(), SIGNAL(closed()), q, SLOT(_q_networkSessionClosed()));
               QObject::disconnect(networkSession.data(), SIGNAL(stateChanged(QNetworkSession::State)),
                   q, SLOT(_q_networkSessionStateChanged(QNetworkSession::State)));
      -        QObject::disconnect(networkSessionStrongRef.data(), SIGNAL(error(QNetworkSession::SessionError)),
      +        QObject::disconnect(networkSession.data(), SIGNAL(error(QNetworkSession::SessionError)),
                                   q, SLOT(_q_networkSessionFailed(QNetworkSession::SessionError)));
       
               networkSessionStrongRef.clear();
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            tpochep Timur Pocheptsov
            jorisvergeer Joris Vergeer
            Votes:
            3 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes