mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-04-28 21:07:59 +03:00
Improve Windows crash/freeze catcher UX
* Change crash log to crash dump in messages. * Make the freeze catcher popup disappear more quickly when OpenMW thaws - we got a few freeze dumps from after a thaw. * Improve freeze catcher message - hopefully fewer users think it's a false positive they're expected to put up with and we get future reports sooner.
This commit is contained in:
parent
f7f148a6ca
commit
deb070389f
4 changed files with 12 additions and 10 deletions
|
@ -237,7 +237,7 @@ namespace Crash
|
||||||
// must remain until monitor has finished
|
// must remain until monitor has finished
|
||||||
waitMonitor();
|
waitMonitor();
|
||||||
|
|
||||||
std::string message = "OpenMW has encountered a fatal error.\nCrash log saved to '"
|
std::string message = "OpenMW has encountered a fatal error.\nCrash dump saved to '"
|
||||||
+ Misc::StringUtils::u8StringToString(getCrashDumpPath(*mShm).u8string())
|
+ Misc::StringUtils::u8StringToString(getCrashDumpPath(*mShm).u8string())
|
||||||
+ "'.\nPlease report this to https://gitlab.com/OpenMW/openmw/issues !";
|
+ "'.\nPlease report this to https://gitlab.com/OpenMW/openmw/issues !";
|
||||||
SDL_ShowSimpleMessageBox(0, "Fatal Error", message.c_str(), nullptr);
|
SDL_ShowSimpleMessageBox(0, "Fatal Error", message.c_str(), nullptr);
|
||||||
|
|
|
@ -21,6 +21,7 @@ namespace Crash
|
||||||
// the main openmw process in task manager.
|
// the main openmw process in task manager.
|
||||||
|
|
||||||
static constexpr const int CrashCatcherTimeout = 2500;
|
static constexpr const int CrashCatcherTimeout = 2500;
|
||||||
|
static constexpr const int CrashCatcherThawTimeout = 250;
|
||||||
|
|
||||||
struct CrashSHM;
|
struct CrashSHM;
|
||||||
|
|
||||||
|
|
|
@ -87,9 +87,10 @@ namespace Crash
|
||||||
SetEvent(mSignalAppEvent);
|
SetEvent(mSignalAppEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CrashMonitor::waitApp() const
|
bool CrashMonitor::waitApp(bool thawMode) const
|
||||||
{
|
{
|
||||||
return WaitForSingleObject(mSignalMonitorEvent, CrashCatcherTimeout) == WAIT_OBJECT_0;
|
return WaitForSingleObject(mSignalMonitorEvent, thawMode ? CrashCatcherThawTimeout : CrashCatcherTimeout)
|
||||||
|
== WAIT_OBJECT_0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CrashMonitor::isAppAlive() const
|
bool CrashMonitor::isAppAlive() const
|
||||||
|
@ -185,7 +186,7 @@ namespace Crash
|
||||||
frozen = false;
|
frozen = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mFreezeAbort && waitApp())
|
if (!mFreezeAbort && waitApp(frozen))
|
||||||
{
|
{
|
||||||
shmLock();
|
shmLock();
|
||||||
|
|
||||||
|
@ -215,7 +216,7 @@ namespace Crash
|
||||||
{
|
{
|
||||||
handleCrash(true);
|
handleCrash(true);
|
||||||
TerminateProcess(mAppProcessHandle, 0xDEAD);
|
TerminateProcess(mAppProcessHandle, 0xDEAD);
|
||||||
std::string message = "OpenMW appears to have frozen.\nCrash log saved to '"
|
std::string message = "OpenMW has frozen.\nCrash dump saved to '"
|
||||||
+ Misc::StringUtils::u8StringToString(getFreezeDumpPath(*mShm).u8string())
|
+ Misc::StringUtils::u8StringToString(getFreezeDumpPath(*mShm).u8string())
|
||||||
+ "'.\nPlease report this to https://gitlab.com/OpenMW/openmw/issues !";
|
+ "'.\nPlease report this to https://gitlab.com/OpenMW/openmw/issues !";
|
||||||
SDL_ShowSimpleMessageBox(0, "Fatal Error", message.c_str(), nullptr);
|
SDL_ShowSimpleMessageBox(0, "Fatal Error", message.c_str(), nullptr);
|
||||||
|
@ -289,10 +290,10 @@ namespace Crash
|
||||||
{
|
{
|
||||||
std::thread messageBoxThread([&]() {
|
std::thread messageBoxThread([&]() {
|
||||||
SDL_MessageBoxButtonData button = { SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Abort" };
|
SDL_MessageBoxButtonData button = { SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Abort" };
|
||||||
SDL_MessageBoxData messageBoxData = { SDL_MESSAGEBOX_ERROR, nullptr, "OpenMW appears to have frozen",
|
SDL_MessageBoxData messageBoxData = { SDL_MESSAGEBOX_ERROR, nullptr, "OpenMW has frozen",
|
||||||
"OpenMW appears to have frozen. Press Abort to terminate it and generate a crash dump.\nIf OpenMW "
|
"OpenMW has frozen. This should never happen. Press Abort to terminate it and generate a crash dump to "
|
||||||
"hasn't actually frozen, this message box will disappear a within a few seconds of it becoming "
|
"help diagnose the problem.\nOpenMW may unfreeze if you wait, and this message box will disappear "
|
||||||
"responsive.",
|
"after it becomes responsive.",
|
||||||
1, &button, nullptr };
|
1, &button, nullptr };
|
||||||
|
|
||||||
int buttonId;
|
int buttonId;
|
||||||
|
|
|
@ -41,7 +41,7 @@ namespace Crash
|
||||||
|
|
||||||
void signalApp() const;
|
void signalApp() const;
|
||||||
|
|
||||||
bool waitApp() const;
|
bool waitApp(bool thawMode) const;
|
||||||
|
|
||||||
bool isAppAlive() const;
|
bool isAppAlive() const;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue