diff --git a/src/merge_mining_client_tari.cpp b/src/merge_mining_client_tari.cpp index 5123f48..1b93320 100644 --- a/src/merge_mining_client_tari.cpp +++ b/src/merge_mining_client_tari.cpp @@ -891,13 +891,13 @@ MergeMiningClientTari::TariClient::TariClient() m_buf[0] = '\0'; } -void MergeMiningClientTari::TariClient::reset() +void MergeMiningClientTari::TariClient::break_pairing() { if (is_paired()) { m_pairedClient->m_pairedClient = nullptr; m_pairedClient->close(); - m_pairedClient = nullptr; } + m_pairedClient = nullptr; m_pairedClientSavedResetCounter = std::numeric_limits::max(); } diff --git a/src/merge_mining_client_tari.h b/src/merge_mining_client_tari.h index e29db11..b383482 100644 --- a/src/merge_mining_client_tari.h +++ b/src/merge_mining_client_tari.h @@ -113,15 +113,18 @@ private: static Client* allocate() { return new TariClient(); } virtual size_t size() const override { return sizeof(TariClient); } - void reset() override; + void reset() override { break_pairing(); } [[nodiscard]] bool on_connect() override; [[nodiscard]] bool on_read(const char* data, uint32_t size) override; + void on_disconnected() override { break_pairing(); } alignas(8) char m_buf[BUF_SIZE]; std::vector m_pendingData; bool is_paired() const { return m_pairedClient && (m_pairedClient->m_resetCounter == m_pairedClientSavedResetCounter); } + void break_pairing(); + TariClient* m_pairedClient; uint32_t m_pairedClientSavedResetCounter; };