Commits

nat_linden committed a1ddb13

DEV-40930: At app shutdown, clear LLModalDialog::sModalStack. Otherwise, any
modal dialog still left open will crump on destruction with LL_ERRS. If we
don't want the user to shut down the app with a modal dialog open, we should
deal with it better than a popup that simply makes us look buggy.

Comments (0)

Files changed (3)

indra/llui/llmodaldialog.cpp

 	}
 }
 
-
-
+void LLModalDialog::shutdownModals()
+{
+	// This method is only for use during app shutdown. ~LLModalDialog()
+	// checks sModalStack, and if the dialog instance is still there, it
+	// crumps with "Attempt to delete dialog while still in sModalStack!" But
+	// at app shutdown, all bets are off. If the user asks to shut down the
+	// app, we shouldn't have to care WHAT's open. Put differently, if a modal
+	// dialog is so crucial that we can't let the user terminate until s/he
+	// addresses it, we should reject a termination request. The current state
+	// of affairs is that we accept it, but then produce an llerrs popup that
+	// simply makes our software look unreliable.
+	sModalStack.clear();
+}

indra/llui/llmodaldialog.h

 	static void		onAppFocusGained();
 
 	static S32		activeCount() { return sModalStack.size(); }
-	
+	static void		shutdownModals();
+
 protected:
 	void			centerOnScreen();
 

indra/newview/llviewerwindow.cpp

 	{
 		gMorphView->setVisible(FALSE);
 	}
-	
+
+	// DEV-40930: Clear sModalStack. Otherwise, any LLModalDialog left open
+	// will crump with LL_ERRS.
+	LLModalDialog::shutdownModals();
+
 	// Delete all child views.
 	delete mRootView;
 	mRootView = NULL;