From b504d631171c27969115f12e761aebb20d923028 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 8 Aug 2012 08:54:19 +0200 Subject: ProxyDatabasePlugin: use an artificial "root" directory Fixes assertion failures in the Directory library. --- src/db/ProxyDatabasePlugin.cxx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/db/ProxyDatabasePlugin.cxx b/src/db/ProxyDatabasePlugin.cxx index 3b2fb36a2..b941b9576 100644 --- a/src/db/ProxyDatabasePlugin.cxx +++ b/src/db/ProxyDatabasePlugin.cxx @@ -49,6 +49,7 @@ class ProxyDatabase : public Database { unsigned port; struct mpd_connection *connection; + struct directory *root; public: static Database *Create(const struct config_param *param, @@ -124,6 +125,8 @@ ProxyDatabase::Open(GError **error_r) return false; } + root = directory_new_root(); + return true; } @@ -132,6 +135,7 @@ ProxyDatabase::Close() { assert(connection != nullptr); + directory_free(root); mpd_connection_free(connection); } @@ -331,11 +335,14 @@ ProxyDatabase::Visit(const DatabaseSelection &selection, // TODO: match // TODO: auto-reconnect - struct directory *parent = directory_new(selection.uri, nullptr); + struct directory *parent = *selection.uri == 0 + ? root + : directory_new(selection.uri, root); bool success = ::Visit(connection, *parent, selection.recursive, visit_directory, visit_song, visit_playlist, error_r); - directory_free(parent); + if (parent != root) + directory_free(parent); return success; } -- cgit v1.2.3