diff --git a/src/pglab/ASyncDBConnection.cpp b/src/pglab/ASyncDBConnection.cpp index c1ee412..1cd900c 100644 --- a/src/pglab/ASyncDBConnection.cpp +++ b/src/pglab/ASyncDBConnection.cpp @@ -1,4 +1,4 @@ -#include "ASyncDBConnection.h" +#include "ASyncDBConnection.h" #include "ScopeGuard.h" #include @@ -23,7 +23,7 @@ void ASyncDBConnection::setupConnection(const ConnectionConfig &config) bool ok = m_connection.connectStart(keywords, values); // auto start = std::chrono::steady_clock::now(); - if (ok && m_connection.status() != CONNECTION_BAD) { + if (ok && m_connection.status() != CONNECTION_BAD) { auto sock_handle = m_connection.socket(); m_asioSock.assign(ip::tcp::v4(), sock_handle); m_asioSock.non_blocking(true); @@ -66,15 +66,15 @@ void ASyncDBConnection::async_connect_handler(boost::system::error_code ec, std: void ASyncDBConnection::doStateCallback(State state) { - m_state = state; + m_state = state; if (state == State::Connected) { m_canceller = m_connection.getCancel(); m_connection.setNoticeReceiver( [this](const PGresult *result) { processNotice(result); }); } - std::lock_guard lg(m_stateCallback.m_mutex); - if (m_stateCallback.m_func) { + std::lock_guard lg(m_stateCallback.m_mutex); + if (m_stateCallback.m_func) { m_stateCallback.m_func(state); } @@ -87,8 +87,10 @@ void ASyncDBConnection::closeConnection() if (m_state == State::QuerySend) { m_canceller.cancel(nullptr); } - m_asioSock.close(); - m_connection.close(); + if (m_state != State::NotConnected) { + m_asioSock.close(); + m_connection.close(); + } doStateCallback(State::NotConnected); }