diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 142378b5403dd35e64bd7a6f0d94041e6216a190..bc06078928f84cb4aeead9c6c1f89a030f73b35c 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2962,6 +2962,17 @@ <string>Boolean</string> <key>Value</key> <integer>0</integer> + </map> + <key>FastQuit</key> + <map> + <key>Comment</key> + <string>Quits as quickly as possible, only sending logout request before forcefully terminating. Use with care, as this might result in data corruption or loss.</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> </map> <key>FeatureManagerHTTPTable</key> <map> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index e6661e4c9abdf935ef5ed0a668a60c315631bc28..91fae709df9e7d1f66fcb139b0883a74739a8535 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2879,8 +2879,22 @@ void LLAppViewer::forceQuit() LLApp::setQuitting(); } +void LLAppViewer::fastQuit() +{ + if (LLStartUp::getStartupState() >= STATE_STARTED) + { + sendLogoutRequest(); + } + _exit(isError()); +} + void LLAppViewer::requestQuit() { + if (gSavedSettings.getBOOL("FastQuit")) + { + fastQuit(); + } + llinfos << "requestQuit" << llendl; LLViewerRegion* region = gAgent.getRegion(); diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index b0f8c1dc3da1370e0d15018084d960df6500a6e1..62ebd0712eeca07d12424a4d26d1f75172ae17a6 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -66,6 +66,7 @@ class LLAppViewer : public LLApp // Application control void forceQuit(); // Puts the viewer into 'shutting down without error' mode. + void fastQuit(); // Shuts down the viewer immediately after sending a logout message void requestQuit(); // Request a quit. A kinder, gentler quit. void userQuit(); // The users asks to quit. Confirm, then requestQuit() void earlyExit(const std::string& name, diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index d328567a0e0f4f2e7e919fffebdaad9618af947a..2c6f014d17c56c9cdc96abcdac9bb3afc0b07c56 100644 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -175,6 +175,12 @@ int APIENTRY WINMAIN(HINSTANCE hInstance, viewer_app_ptr->mainLoop(); } + if (gSavedSettings.getBOOL("FastQuit")) + { + viewer_app_ptr->fastQuit(); + } + + if (!LLApp::isError()) { //