From 78ad2fb517c06f0593213ad946e7a90f8772dda0 Mon Sep 17 00:00:00 2001 From: Andreas Date: Tue, 22 Jan 2013 22:58:32 +0100 Subject: [PATCH] Fixed an issue where clementine could crash: A client connects before the playlist manager is initialized. This caused a null pointer exception. Now the server is started after the playlist manager was initialized. --- src/core/application.cpp | 5 ++++- src/networkremote/networkremotehelper.cpp | 4 ++++ src/networkremote/networkremotehelper.h | 4 +++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/core/application.cpp b/src/core/application.cpp index d9ee0b5fd..d910eedf1 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -108,8 +108,11 @@ Application::Application(QObject* parent) network_remote_ = new NetworkRemote(this); MoveToNewThread(network_remote_); + // This must be before libraray_->Init(); + // In the constructor the helper waits for the signal PlaylistManagerInitialized + // to start the remote. Without the playlist manager clementine can + // crash when a client connects before the manager is initialized! network_remote_helper_ = new NetworkRemoteHelper(this); - network_remote_helper_->StartServer(); library_->Init(); diff --git a/src/networkremote/networkremotehelper.cpp b/src/networkremote/networkremotehelper.cpp index 40ba8b592..27a5a63ac 100644 --- a/src/networkremote/networkremotehelper.cpp +++ b/src/networkremote/networkremotehelper.cpp @@ -33,6 +33,10 @@ NetworkRemoteHelper::NetworkRemoteHelper(Application* app) connect(this, SIGNAL(SetupServerSig()), app_->network_remote(), SLOT(SetupServer())); + // Start the server once the playlistmanager is initialized + connect(app_->playlist_manager(), SIGNAL(PlaylistManagerInitialized()), + this, SLOT(StartServer())); + sInstance = this; } diff --git a/src/networkremote/networkremotehelper.h b/src/networkremote/networkremotehelper.h index a11d8d3f5..3c0943f9d 100644 --- a/src/networkremote/networkremotehelper.h +++ b/src/networkremote/networkremotehelper.h @@ -13,9 +13,11 @@ public: NetworkRemoteHelper(Application* app); ~NetworkRemoteHelper(); - void StartServer(); void ReloadSettings(); +private slots: + void StartServer(); + signals: void SetupServerSig(); void StartServerSig();