void Wallet::shutdown() { { std::unique_lock<std::mutex> lock(m_cacheMutex); if (m_isStopping) throwNotDefined(); m_isStopping = true; if (m_state == NOT_INITIALIZED) throwNotDefined(); m_sender.stop(); m_synchronizer.stop(); } m_asyncContextCounter.waitAsyncContextsFinish(); m_node.removeObserver(m_autoRefresher.get()); }
void WalletLegacy::shutdown() { { std::unique_lock<std::mutex> lock(m_cacheMutex); if (m_isStopping) throwNotDefined(); m_isStopping = true; if (m_state != INITIALIZED) throwNotDefined(); m_sender->stop(); } m_blockchainSync.removeObserver(this); m_blockchainSync.stop(); m_asyncContextCounter.waitAsyncContextsFinish(); m_sender.release(); { std::unique_lock<std::mutex> lock(m_cacheMutex); m_isStopping = false; m_state = NOT_INITIALIZED; const auto& accountAddress = m_account.getAccountKeys().address; auto subObject = m_transfersSync.getSubscription(accountAddress); assert(subObject != nullptr); subObject->removeObserver(this); m_transfersSync.removeSubscription(accountAddress); m_transferDetails = nullptr; m_transactionsCache.reset(); m_lastNotifiedActualBalance = 0; m_lastNotifiedPendingBalance = 0; } }