diff options
Diffstat (limited to 'Swiften/Network')
| -rw-r--r-- | Swiften/Network/Connector.cpp | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/Swiften/Network/Connector.cpp b/Swiften/Network/Connector.cpp index 457d8a9..5eddaba 100644 --- a/Swiften/Network/Connector.cpp +++ b/Swiften/Network/Connector.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2016 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited.   * All rights reserved.   * See the COPYING file for more information.   */ @@ -148,6 +148,13 @@ void Connector::handleConnectionConnectFinished(bool error) {              timer->stop();              timer.reset();      } +    if (!currentConnection) { +        // We've hit a race condition where multiple finisheds were on the eventloop queue at once. +        // This is particularly likely on macOS where the hourly momentary wakeup while asleep +        // can cause both a timeout and an onConnectFinished to be queued sequentially (SWIFT-232). +        // Let the first one process as normal, but ignore the second. +        return; +    }      currentConnection->onConnectFinished.disconnect(boost::bind(&Connector::handleConnectionConnectFinished, shared_from_this(), _1));      if (error) {          currentConnection.reset(); @@ -189,6 +196,7 @@ void Connector::finish(std::shared_ptr<Connection> connection) {  void Connector::handleTimeout() {      SWIFT_LOG(debug) << "Timeout" << std::endl; +    SWIFT_LOG_ASSERT(currentConnection, error) << "Connection not valid but triggered a timeout" <<std::endl;      handleConnectionConnectFinished(true);  }  | 
 Swift