diff options
Diffstat (limited to '')
-rw-r--r-- | src/db/ProxyDatabasePlugin.cxx | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/db/ProxyDatabasePlugin.cxx b/src/db/ProxyDatabasePlugin.cxx index 94ed72263..344edb900 100644 --- a/src/db/ProxyDatabasePlugin.cxx +++ b/src/db/ProxyDatabasePlugin.cxx @@ -83,6 +83,8 @@ private: bool Connect(Error &error); bool CheckConnection(Error &error); bool EnsureConnected(Error &error); + + void Disconnect(); }; static constexpr Domain libmpdclient_domain("libmpdclient"); @@ -254,7 +256,7 @@ ProxyDatabase::Close() delete root; if (connection != nullptr) - mpd_connection_free(connection); + Disconnect(); } bool @@ -269,10 +271,8 @@ ProxyDatabase::Connect(Error &error) } if (!CheckError(connection, error)) { - if (connection != nullptr) { - mpd_connection_free(connection); - connection = nullptr; - } + if (connection != nullptr) + Disconnect(); return false; } @@ -286,7 +286,7 @@ ProxyDatabase::CheckConnection(Error &error) assert(connection != nullptr); if (!mpd_connection_clear_error(connection)) { - mpd_connection_free(connection); + Disconnect(); return Connect(error); } @@ -301,6 +301,15 @@ ProxyDatabase::EnsureConnected(Error &error) : Connect(error); } +void +ProxyDatabase::Disconnect() +{ + assert(connection != nullptr); + + mpd_connection_free(connection); + connection = nullptr; +} + static Song * Convert(const struct mpd_song *song); |