1. simon_linden
  2. viewer-rabbit


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.

  • Participants
  • Parent commits b9658ac
  • Branches default

Comments (0)

Files changed (3)

File indra/llui/llmodaldialog.cpp

View file
  • Ignore whitespace
+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();

File indra/llui/llmodaldialog.h

View file
  • Ignore whitespace
 	static void		onAppFocusGained();
 	static S32		activeCount() { return sModalStack.size(); }
+	static void		shutdownModals();
 	void			centerOnScreen();

File indra/newview/llviewerwindow.cpp

View file
  • Ignore whitespace
+	// DEV-40930: Clear sModalStack. Otherwise, any LLModalDialog left open
+	// will crump with LL_ERRS.
+	LLModalDialog::shutdownModals();
 	// Delete all child views.
 	delete mRootView;
 	mRootView = NULL;