diff --git a/include/tls_session.h b/include/tls_session.h index d0adb63820fcf37ca9c2517cb1ada789b8bb1834..448378771401fa37e2b2a0bc13a8d8a020408fdd 100644 --- a/include/tls_session.h +++ b/include/tls_session.h @@ -133,8 +133,6 @@ public: 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 68f40b1704854a36af3d7136f19a3889ad167337..7c3c8d22cdfd12797cc17fd63ded5443f2a8e4f8 100644 --- a/src/connectionmanager.cpp +++ b/src/connectionmanager.cpp @@ -1185,6 +1185,13 @@ ConnectionManager::Impl::onTlsNegotiationDone(const std::shared_ptr<DeviceInfo>& 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 1c8ae3e888fc1426dcc0b411bcde018a865df29c..3fbd8205e94fb7ee1e966f3eb4243904142fda4a 100644 --- a/src/peer_connection.cpp +++ b/src/peer_connection.cpp @@ -382,15 +382,6 @@ TlsSocketEndpoint::peerCertificate() const 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 c6f01973232dce7abdabdf0b828cebb64ee3b5fb..7d91d04191d7b6dc7fb3472961a74b21aad976b0 100644 --- a/src/peer_connection.h +++ b/src/peer_connection.h @@ -123,8 +123,6 @@ public: } 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 de0347fbb5f5ba13aad265890fcb700376a5ec50..1d7b24d002e54d310d058a82bf1a3b40c0ae7833 100644 --- a/src/security/tls_session.cpp +++ b/src/security/tls_session.cpp @@ -1737,24 +1737,6 @@ TlsSession::read(ValueType* data, std::size_t size, std::error_code& ec) 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 {