From 388768b3a65c8b9264070090480c948663d746e8 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 26 Apr 2018 19:38:57 +0200 Subject: [PATCH] db/proxy: call mpd_search_cancel() after search error Fixes "search already in progress" errors. --- NEWS | 2 ++ src/db/plugins/ProxyDatabasePlugin.cxx | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 11a77af8d..50210f28e 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,8 @@ ver 0.20.19 (not yet released) * protocol - validate absolute seek time, reject negative values +* database + - proxy: fix "search already in progress" errors * input - mms: fix lockup bug and a crash bug * decoder diff --git a/src/db/plugins/ProxyDatabasePlugin.cxx b/src/db/plugins/ProxyDatabasePlugin.cxx index 13f174024..9b5da1dd9 100644 --- a/src/db/plugins/ProxyDatabasePlugin.cxx +++ b/src/db/plugins/ProxyDatabasePlugin.cxx @@ -682,7 +682,7 @@ static void SearchSongs(struct mpd_connection *connection, const DatabaseSelection &selection, VisitSong visit_song) -{ +try { assert(selection.recursive); assert(visit_song); @@ -709,6 +709,11 @@ SearchSongs(struct mpd_connection *connection, if (!mpd_response_finish(connection)) ThrowError(connection); +} catch (...) { + if (connection != nullptr) + mpd_search_cancel(connection); + + throw; } /** @@ -758,7 +763,7 @@ ProxyDatabase::VisitUniqueTags(const DatabaseSelection &selection, TagType tag_type, gcc_unused tag_mask_t group_mask, VisitTag visit_tag) const -{ +try { // TODO: eliminate the const_cast const_cast(this)->EnsureConnected(); @@ -801,6 +806,11 @@ ProxyDatabase::VisitUniqueTags(const DatabaseSelection &selection, if (!mpd_response_finish(connection)) ThrowError(connection); +} catch (...) { + if (connection != nullptr) + mpd_search_cancel(connection); + + throw; } DatabaseStats