connectionmanager: remove connecton if TLS negotiation fails

If a TLS handshake was failing, the device information was not
correctly removed, causing a connection to be detected and further
communications to fail.
So, while monitoring, some connections were stuck in "Connecting TLS".

Moreover, remove waitForReady because it's unused

Change-Id: I8350d7f8731311ab46db78fb26328edc0dcb31dc
diff --git a/include/tls_session.h b/include/tls_session.h
index d0adb63..4483787 100644
--- a/include/tls_session.h
+++ b/include/tls_session.h
@@ -133,8 +133,6 @@
 
     int maxPayload() const override;
 
-    void waitForReady(const duration& timeout = {});
-
     /// Synchronous writing.
     /// Return a positive number for number of bytes write, or 0 and \a ec set in case of error.
     std::size_t write(const ValueType* data, std::size_t size, std::error_code& ec) override;
diff --git a/src/connectionmanager.cpp b/src/connectionmanager.cpp
index 68f40b1..7c3c8d2 100644
--- a/src/connectionmanager.cpp
+++ b/src/connectionmanager.cpp
@@ -1185,6 +1185,13 @@
                                        vid);
             dinfo->executePendingOperations(vid, nullptr);
         }
+
+        std::unique_lock<std::mutex> lk(dinfo->mtx_);
+        dinfo->info.erase(vid);
+
+        if (dinfo->empty()) {
+            infos_.removeDeviceInfo(dinfo->deviceId);
+        }
     } else {
         // The socket is ready, store it
         if (isDhtRequest) {
diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp
index 1c8ae3e..3fbd820 100644
--- a/src/peer_connection.cpp
+++ b/src/peer_connection.cpp
@@ -382,15 +382,6 @@
     return pimpl_->tls->peerCertificate();
 }
 
-void
-TlsSocketEndpoint::waitForReady(const std::chrono::milliseconds& timeout)
-{
-    if (!pimpl_->tls) {
-        return;
-    }
-    pimpl_->tls->waitForReady(timeout);
-}
-
 int
 TlsSocketEndpoint::waitForData(std::chrono::milliseconds timeout, std::error_code& ec) const
 {
diff --git a/src/peer_connection.h b/src/peer_connection.h
index c6f0197..7d91d04 100644
--- a/src/peer_connection.h
+++ b/src/peer_connection.h
@@ -123,8 +123,6 @@
     }
     int waitForData(std::chrono::milliseconds timeout, std::error_code&) const override;
 
-    void waitForReady(const std::chrono::milliseconds& timeout = {});
-
     void setOnStateChange(OnStateChangeCb&& cb);
     void setOnReady(OnReadyCb&& cb);
 
diff --git a/src/security/tls_session.cpp b/src/security/tls_session.cpp
index de0347f..1d7b24d 100644
--- a/src/security/tls_session.cpp
+++ b/src/security/tls_session.cpp
@@ -1737,24 +1737,6 @@
     return 0;
 }
 
-void
-TlsSession::waitForReady(const duration& timeout)
-{
-    auto ready = [this]() -> bool {
-        auto state = pimpl_->state_.load();
-        return state == TlsSessionState::ESTABLISHED or state == TlsSessionState::SHUTDOWN;
-    };
-    std::unique_lock<std::mutex> lk(pimpl_->stateMutex_);
-    if (timeout == duration::zero())
-        pimpl_->stateCondition_.wait(lk, ready);
-    else
-        pimpl_->stateCondition_.wait_for(lk, timeout, ready);
-
-    if (!ready())
-        throw std::logic_error("Invalid state in TlsSession::waitForReady: "
-                               + std::to_string((int) pimpl_->state_.load()));
-}
-
 int
 TlsSession::waitForData(std::chrono::milliseconds timeout, std::error_code& ec) const
 {