Browse Source

qt: Avoid splash-screen related memory leak

Make splash screen queue its own deletion when it receives the finished
command, instead of relying on WA_DeleteOnClose which doesn't work under
these circumstances.
0.14
Wladimir J. van der Laan 8 years ago
parent
commit
e4f126a7ba
  1. 5
      src/qt/bitcoin.cpp
  2. 1
      src/qt/splashscreen.cpp

5
src/qt/bitcoin.cpp

@ -365,9 +365,8 @@ void BitcoinApplication::createWindow(const NetworkStyle *networkStyle)
void BitcoinApplication::createSplashScreen(const NetworkStyle *networkStyle) void BitcoinApplication::createSplashScreen(const NetworkStyle *networkStyle)
{ {
SplashScreen *splash = new SplashScreen(0, networkStyle); SplashScreen *splash = new SplashScreen(0, networkStyle);
// We don't hold a direct pointer to the splash screen after creation, so use // We don't hold a direct pointer to the splash screen after creation, but the splash
// Qt::WA_DeleteOnClose to make sure that the window will be deleted eventually. // screen will take care of deleting itself when slotFinish happens.
splash->setAttribute(Qt::WA_DeleteOnClose);
splash->show(); splash->show();
connect(this, SIGNAL(splashFinished(QWidget*)), splash, SLOT(slotFinish(QWidget*))); connect(this, SIGNAL(splashFinished(QWidget*)), splash, SLOT(slotFinish(QWidget*)));
connect(this, SIGNAL(requestedShutdown()), splash, SLOT(close())); connect(this, SIGNAL(requestedShutdown()), splash, SLOT(close()));

1
src/qt/splashscreen.cpp

@ -147,6 +147,7 @@ void SplashScreen::slotFinish(QWidget *mainWin)
if (isMinimized()) if (isMinimized())
showNormal(); showNormal();
hide(); hide();
deleteLater(); // No more need for this
} }
static void InitMessage(SplashScreen *splash, const std::string &message) static void InitMessage(SplashScreen *splash, const std::string &message)

Loading…
Cancel
Save